RS232串口编程

时间:2008-06-05 13:55:46   来源:论坛整理  作者:  编辑:chinaitzhe
各位大侠,在Windows下,使用用插件写RS232串口编程,用事件
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 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面