【发布时间】:2016-01-07 04:13:16
【问题描述】:
是否可以从用户空间应用程序检查数据是否可用于在 UART 端口中读取。代码是在嵌入式 Linux 平台上用 C 语言编写的。
例如:
while(isDataAvalable(fileDescriptor)) {
read(fileDescriptor, buffer, 10)
}
我正在寻找linux提供的一些函数,如果有数据要从端口读取,则返回true,如果没有数据则返回false。但函数本身不应从硬件缓冲区中删除数据,直到使用“read”方法读取数据。
如果linux中没有这样的内置函数,有没有办法使用linux系统调用创建一个包装函数来实现上述功能,供用户空间应用程序使用..?
【问题讨论】:
-
您是否尝试过使用select?
-
您对 I/O 和串口工作原理的理解是有缺陷的。设备驱动程序总是尽快读取 UART 端口,以防止接收 溢出错误。数据存储在系统缓冲区中。 (实际上可能有一系列缓冲区,例如用于线路规程。)用户空间 read() 总是从缓冲区中检索数据,而不是直接从硬件中检索数据。见cmrr.umn.edu/~strupp/serial.html#5_1_3
-
我同意您的观点,即用户空间 read 调用从缓冲区中检索数据。我需要一个函数来检查该缓冲区中是否有任何数据可用。 read() 总是从缓冲区取数据,我不想取数据,只需要看看缓冲区有没有数据。
标签: linux serial-port embedded-linux uart