RS232串口编程
时间:2008-06-05 13:55:46
来源:论坛整理 作者: 编辑:chinaitzhe
ON_EVENT(CRS232testDlg, IDC_MSCOMM1, 1 /* OnComm */, OnOnComm, VTS_NONE)
来实现对串口数据的监控,当串口接收到数据时就读出来
if( (m_comRS232.GetCommEvent() == 2) && (m_comRS232.GetInBufferCount() > 0)) //接收到的字符数大于0
请问在Linux下怎么实现上面所说的功能,即另开个线程监控串口,当有数据时,把数据读出来
//加分
网友回复:这个就要上google搜所linux 串口编程了!
只做过windows的串口编程
网友回复:漂过....
我也只做过windows下面的~
网友回复:可以用select,具体可看man select
另一种方法可以用信号来做:
struct sigaction saio; /* definition of signal action */
/* 在使装置非同步化前, 安装讯号处理程序 */
saio.sa_handler = signal_handler_IO;
saio.sa_mask = 0;
saio.sa_flags = 0;
saio.sa_restorer = NULL;
sigaction(SIGIO,&saio,NULL);
/* 答应行程去接收 SIGIO 讯号*/
fcntl(fd, F_SETOWN, getpid());
/* 使档案ake the file descriptor 非同步 (使用手册上说只有 O_APPEND 及
O_NONBLOCK, 而 F_SETFL 也可以用...) */
fcntl(fd, F_SETFL, FASYNC);
void signal_handler_IO (int status)
{
printf("received SIGIO signal.\n");
}
网友回复:maybe like this
- C/C code
Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ char *dev = "/dev/ttyS0"; fd = OpenDev(dev); set_speed(fd, 19200); if(set_Parity(fd, 8, 1, ‘N’) == FALSE) { printf("Set Parity Error\n"); exit(0); } while(1) { while((nread = read(fd, buff, 512)) > 0) { printf("\nLen", nread); buff[nread 1] = '\0'; printf("\n%s", buff); } }
网友回复:可以使用windows下的回调方式,
Linux下可以参照signal的函数原型来实现一个自己的回调函数,其实就是函数指针
网友回复:谢谢各位 我用的 nread = read(fd, buff, 512) > 0 的方式
另开了个线程来不断接收。
关键字:RS,串口,编程,
下一篇:下面没有链接了











文章评论
共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面