文件I/O编程之: 嵌入式Linux串口应用编程
n MIN = 0和TIME > n MIN = 0和TIME > 0:只要有数据可读或者经过TIME个十分之一秒的时间,read()函数则立即返回,返回值为被读取的字节数。如果超时并且未读到数据,则read()函数返回0。
n MIN > 0和TIME > 0:当有MIN个字节可读或者两个输入字符之间的时间间隔超过TIME个十分之一秒时,read()函数才返回。因为在输入第一个字符之后系统才会启动定时器,所以在这种情况下,read()函数至少读取一个字节之后才返回。
按照严格意义来讲,原始模式是一种特殊的非规范模式。在原始模式下,所有的输入数据以字节为单位被处理。在这个模式下,终端是不可回显的,而且所有特定的终端输入/输出控制处理不可用。通过调用cfmakeraw()函数可以将终端设置为原始模式,而且该函数通过以下代码可以得到实现。
termios_p->c_iflag &= ~(IGNBRK | BRKINT | PARMRK | ISTRIP
| INLCR | IGNCR | ICRNL | IXON);
termios_p->c_oflag &= ~OPOST;
termios_p->c_lflag &= ~(ECHO | ECHONL | ICANON | ISIG | IEXTEN);
termios_p->c_cflag &= ~(CSIZE | PARENB);
termios_p->c_cflag |= CS8;
下面讲解设置串口的基本方法。设置串口中最基本的包括波特率设置,校验位和停止位设置。在这个结构中最为重要的是c_cflag,通过对它的赋值,用户可以设置波特率、字符大小、数据位、停止位、奇偶校验位和硬软流控等。另外c_iflag和c_cc也是比较常用的标志。在此主要对这3个成员进行详细说明。c_cflag支持的常量名称如表6.11所示。其中设置波特率宏名为相应的波特率数值前加上‘B’,由于数值较多,本表没有全部列出。
表6.11 c_cflag支持的常量名称
CBAUD | 波特率的位掩码 |
B0 | 0波特率(放弃DTR) |
… | … |
B1800 | 1800波特率 |
B2400 | 2400波特率 |
续表
B4800 | 4800波特率 |
B9600 | 9600波特率 |
B19200 | 19200波特率 |
B38400 | 38400波特率 |
B57600 | 57600波特率 |
B115200 | 115200波特率 |
EXTA | 外部时钟率 |
EXTB | 外部时钟率 |
CSIZE | 数据位的位掩码 |
CS5 | 5个数据位 |
CS6 | 6个数据位 |
CS7 | 7个数据位 |
CS8 | 8个数据位 |
CSTOPB | 2个停止位(不设则是1个停止位) |
CREAD | 接收使能 |
PARENB PARODD | 校验位使能 使用奇校验而不使用偶校验 |
HUPCL | 最后关闭时挂线(放弃DTR) |
CLOCAL | 本地连接(不改变端口所有者) |
CRTSCTS | 硬件流控 |
在这里,不能直接对c_cflag成员初始化,而要将其通过"与"、"或"操作使用其中的某些选项。输入模式标志c_iflag用于控制端口接收端的字符输入处理。c_iflag支持的常量名称如表6.12所示。
表6.12 c_iflag支持的常量名称
INPCK | 奇偶校验使能 |
IGNPAR | 忽略奇偶校验错误 |
PARMRK | 奇偶校验错误掩码 |
ISTRIP | 裁减掉第8位比特 |
IXON | 启动输出软件流控 |
IXOFF | 启动输入软件流控 |
IXANY | 输入任意字符可以重新启动输出(默认为输入起始字符才重启输出) |
IGNBRK | 忽略输入终止条件 |
BRKINT | 当检测到输入终止条件时发送SIGINT信号 |
INLCR | 将接收到的NL(换行符)转换为CR(回车符) |
IGNCR | 忽略接收到的CR(回车符) |
ICRNL | 将接收到的CR(回车符)转换 |
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE下驱动程序开发基础(二)(11-09)
- VXWORKS内核分析(11-11)
- REDIce-Linux--灵活的实时Linux内核(11-12)
- Linux2.4内核为我们带来了什么?(11-12)