免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4676 | 回复: 5

[C] 【求助】串口自收自发的一段代码 [复制链接]

论坛徽章:
0
发表于 2007-11-21 20:43 |显示全部楼层
10可用积分
#define SleepMs( ms ) ( usleep( (ms)*1000 ) )

//打开串口
int OpenDev(char *Dev)
{
        int        fd = open( Dev, O_RDWR | O_NOCTTY | O_NDELAY);
       
        if (fd==-1)       
        {                        
                perror("Can't Open Serial Port");
        }       
        else       
        {
                fcntl(fd, F_SETFL,FNDELAY);       
        }
        return fd;
}

int main()
{               
        int comfd = OpenDev( "/dev/ttyS0" );
        char srcBuf[] = "12345";                       
        while( 1 )
        {
                int writeLen = write( comfd, srcBuf, sizeof(srcBuf) );                //S0发送
                char tmpRecvBuf[16];
                //接收
                for( int i = 0; i < 100; ++i )
                {
                        if ( read( comfd, tmpRecvBuf, sizeof(tmpRecvBuf) ) > 0 )
                        {                               
                                printf( "ok\n" );
                                break;
                        }
                        SleepMs( 1 );
                }
               
                SleepMs( 1000 );
        }
        return 0;
}

//以上是串口自发自收的测试程序,将串口2,3脚短接,但是没有打印"ok",即没有收到数据;而发送是成功的(writeLen的值大于0)。
请问这是什么原因?

P。S。因为是同一个串口,所以没有设置波特率等参数;另外串口用“串口调试助手”测试是正常的,能够自发自收数据。

论坛徽章:
0
发表于 2007-11-21 21:24 |显示全部楼层
接受1个程序,发送1个 程序,两个别写在一起

论坛徽章:
0
发表于 2007-11-21 23:07 |显示全部楼层
好像还有个O_SYNC标志
读写应该设成同步方式吧

论坛徽章:
0
发表于 2007-11-22 09:16 |显示全部楼层
不一定要设置同步的吧,异步工作方式不可以么?

论坛徽章:
0
发表于 2007-11-22 10:40 |显示全部楼层
程序最后退出来吗?,如果没退出来就是read函数阻塞了

论坛徽章:
0
发表于 2007-11-22 12:32 |显示全部楼层
我用的是非阻塞方式,发送是正常工作的。就是接收不到数据(非阻塞循环100次也没收到数据)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP