linux 串口编程
来源:互联网 发布:怎么做软件 编辑:程序博客网 时间:2024/05/27 21:03
最近学习linux串口编程,总结一下遇到的一些问题
(1)write(fd,"xxxx",len)每次发送都没有接收到,主要问题字符串后面加 回车 即“\n”
(2)主要问题就是 阻塞和非阻塞的问题
read函数
ssize_t read(int fd, void *buf, size_t count);
参数:
fd: 将要读取数据的文件描述词。
buf: 所读取到的数据的内存缓冲。
count: 需要读取的数据量。
返回说明:
成功执行时,返回所读取的数据量。失败返回-1,errno被设为以下的某个值
EAGAIN:打开文件时设定了O_NONBLOCK标志,并且当前没有数据可读取
EBADF:文件描述词无效,或者文件不可读
EFAULT:参数buf指向的空间不可访问
EINTR:数据读取前,操作被信号中断
EINVAL:一个或者多个参数无效
EIO:读写出错
EISDIR:参数fd索引的时目录
write函数:函数向打开的设备或文件中写数据。
#include <unistd.h> ssize_t write(int fd, const void *buf, size_t count); 返回值:成功返回写入的字节数,出错返回-1并设置errno
写常规文件时,
write的返回值通常等于请求写的字节数count,而向终端设备或网络写则不一定。读常规文件是不会阻塞的,不管读多少字节read一定会在有限的时间内返回。从终端设备或网络读则不一定,如果从终端输入的数据没有换行符,调用read读终端设备就会阻塞,如果网络上没有接收到数据包,调用read从网络读就会阻塞,至于会阻塞多长时间也是不确定的,如果一直没有数据到达就一直阻塞在那里。同样,写常规文件是不会阻塞的,而向终端设备或网络写则不一定。
http://read.pudn.com/downloads58/sourcecode/comm/com_port/206068/LINUX%E4%B8%8B%E7%9A%84%E4%B8%B2%E5%8F%A3%E9%80%9A%E4%BF%A1%E7%BC%96%E7%A8%8B%E4%B8%8E%E8%B0%83%E8%AF%95.pdf
(3)串口有时可以接收到数据,有时接收不到:
我发现只要你打开过minicom 然后你的程序就可以接收了,你退出minicom就可以。但是你电脑重启后就会失败,后来找到了解决办法,运行过一次minicom这三种情况下使用命令stty -a < /dev/ttyS0查看了COM1的相关参数。然后主要根据自己的读取程序和minicom对串口的设置差异进行了相应的修改,现将读取程序的全部贴在下面。经过修改后,该程序运行之后的/dev/ttyS4的环境参数与直接运行minicom后/dev/ttyS4的环境参数完全相同
主要修改处:
options.c_cflag &= ~HUPCL;
options.c_iflag &= ~INPCK;
options.c_iflag |= IGNBRK;
options.c_iflag &= ~ICRNL;
options.c_iflag &= ~IXON;
options.c_lflag &= ~IEXTEN;
options.c_lflag &= ~ECHOK;
options.c_lflag &= ~ECHOCTL;
options.c_lflag &= ~ECHOKE;
options.c_oflag &= ~ONLCR;
options.c_iflag |= IGNBRK;
options.c_iflag &= ~ICRNL;
options.c_iflag &= ~IXON;
options.c_lflag &= ~IEXTEN;
options.c_lflag &= ~ECHOK;
options.c_lflag &= ~ECHOCTL;
options.c_lflag &= ~ECHOKE;
options.c_oflag &= ~ONLCR;
借鉴文章http://hi.baidu.com/mcu99/item/b8aed1c6b26cf021e80f2e75
- Linux 串口编程
- Linux下串口编程
- Linux串口编程分析
- Linux串口编程
- Linux串口编程
- Linux串口编程
- Linux串口编程
- Linux 下串口编程
- Linux串口编程
- Linux串口编程
- linux串口通信编程
- linux串口编程
- linux 串口编程
- linux串口编程
- linux串口编程
- linux 串口编程
- Linux串口编程分析
- linux 串口编程
- Java IO类图
- 基于AOP和注解简化异步化处理
- oracle学习之道:如何在ORACLE中异步调用存储过程的方法
- Oracle数据库一些信息查询
- oracle 用户口令管理(1)-用户的锁定与解锁
- linux 串口编程
- const和mutable关键字
- WebView播放视频
- getting start with storm 翻译 第七章 part-2
- centos配置eclipse
- Twitter 高并发高可用架构
- hdu 4681(多校联赛8 最长公共子序列)
- HDU 4349 Xiao Ming's Hope 2012 Multi-University Training Contest 5
- uva 10739