免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2112 | 回复: 2
打印 上一主题 下一主题

linux下串口编程之困惑 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-08-07 08:53 |只看该作者 |倒序浏览
最近准备做一个GNome下的应用程序,是与一个外部设备通过串口通信。对于linux下的串口通信,小弟有一些困惑,希望大家能够指点。

1,我做的这个应用程序是希望独占一个串口,请问我用fopen的函数打开串口后,别的程序可以操作它吗?有没有独占打开串口的方法,既不让别的程序打开串口。

2,我对串口的理解是,由于串口有rx与tx,所以读写是相对独立的,所以读写并不需要遵循相应的时序,即我在读串口的同时,其实也可以写串口,写串口的同时,也可以读串口,对吗?

3,由于外部设备可以独立地向PC通过串口发送数据,所以,PC端需要在串口有数据到达就接受,但数据合适到达并不确定,我想用异步的模式来操作串口,并不想不断地去读串口数据。我打算用select方法来做。
我想代码应该如下:
while(1)
{
     ...
     ret = select(serialPort, &rdfds, NULL, NULL, NULL);
     ...
}
但我想的问题是,如果调用了上述接收函数,它就会一直在while循环中,这时程序的其它代码都不能执行,比如PC向串口发送数据到设备,比如GNome窗口的响应,对吧?
我想到的方法有二:
一,将ret = select(serialPort, &rdfds, NULL, NULL, NULL);这段代码加到GNome中的事件轮询机制中去,但我还不晓得方法。
二,fork一个子进程,专门负责接收串口数据。这时,父进程依然可以向串口写数据,并不需要与子进程同步,对吗?
我希望大家能够给些建议。

4,有没有别的方法,既可以实现串口的异步接收数据,又不用新的进程或线程的方法,并且不影响程序其它部分的功能?

论坛徽章:
0
2 [报告]
发表于 2010-08-13 10:54 |只看该作者
串口是全双工的接口,并且不会独占,但是推荐你的几个程序间最好有同步机制,还有就是你可以将你好做的事项都放入select的那3个队列中去监听,如果你你在一个处理中需要很多时间,那么你可以使用进程或者线程,这个根据你的应用可以自己决定

论坛徽章:
0
3 [报告]
发表于 2010-08-16 14:04 |只看该作者
中断+消息机制
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP