LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: Joran

LINUX的串口编程

[复制链接]
发表于 2003-10-13 11:33:16 | 显示全部楼层
现在正在搞linux串口编程,把这个帖子推上来,抛玉引玉吧!
发表于 2003-10-17 10:54:37 | 显示全部楼层
今天有所得,与诸君分享

1.即使设定了options.c_cflag |= IGNPAR,但是如果同时又设置了PARENB和~PARODD,且对方串口设成无校验,本机仍然可以收到从串口发来的数据,但是数据不正确。
2.只要使用了O_NONBLOCK或者O_NDELAY参数,如果不设read的返回值>0的条件,那么会收到大量重复的尾字符,例如:90 ebbbbbbbbb。无论VMIN=1,VTIME=0还是VMIN=0,VTIME=1都如此。如果不对read的返回值加上>0的条件,那么就会收到重复尾字符,如果VTIME的值加大,尾字符的数量就会少一些,直至消失。
3.如果第一个程序采用NONBLOCK的参数后运行,在运行一个类似的程序同时读取串口数据,居然也能分别从串口读到数据,此时fd相同!
4.利用fcntl设置参数和在open是制定参数的效果相同。
发表于 2003-10-28 15:23:46 | 显示全部楼层
为什么select()会节约时间:
调用非阻塞的socket或者串口读写函数会大大浪费系统资源。而select()则允许用户把进程本身挂起来,同时使系统内核监听所要求的一组文件描述符的任何活动。只要确认在任何被监控的文件描述符上出现活动,select()调用将返回指示该文件描述符已经准备好的信息。这样就实现了为进程选出随机的变化,而不必由进程本身对输入进行测试而浪费cpu开销。
发表于 2003-10-29 10:46:44 | 显示全部楼层
谢谢楼上的。
发表于 2004-3-9 12:04:02 | 显示全部楼层
我看了无双兄提供的连接,看上面的介绍这个程序设计的就是测试一个串口给另外一个串口通信的,测试的时候得做稍微修改,编译后运行两个程序。说明中有这么一段:

Depending on how the testing system is setup during install, you may need to change the permissions on the serial port devices to allow data traffic.

chmod a+rw /dev/ttyS0
chmod a+rw /dev/ttyS1

不知道楼主试过没有。

我也很菜,各位能不能给我系统介绍一下这方面的资料?:thank
发表于 2004-3-9 19:09:01 | 显示全部楼层
我想向ttyS0 发Modem AT 命令.
只发字符串就行吧???
我在CLI下
cat /dev/ttyS0
echo hi /dev/ttyS0
都可以...
发表于 2004-3-10 13:56:07 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表