2

我的问题是<termios.h>。据我了解,在通过 UART 读取某些内容时存在两个缓冲区 - 一个存储接收到的字节的硬件缓冲区,以及一个用于加载已存储在硬件缓冲区中的内容的软件缓冲区。read(uart_channel, BUFFER, length)据我了解,这个软件缓冲区是第二个参数。

请说明:硬件缓冲区多长时间?我可以控制它有多长吗?对我来说,读取设备通过 UART 发送的 12 个最新字节至关重要- 我如何确保这一点?

4

2 回答 2

0

我曾经遇到过类似的情况,我所做的是创建一个继续读取 UART(阻塞read)的线程,并且我在线程之间使用了 FIFO。

如果你不能使用线程,你可以只使用select.

于 2015-05-26T16:04:37.640 回答
0

我见过的大多数uC都有一个硬件FIFO,可以设置为在[1,2,4,8,16]字节之后中断。如果 FIFO 在当前配置的波特率的字符间隔的某个小倍数内“部分满”,则 UART 无论如何都会中断。如果您确实必须尽快访问字节,那么您需要将 FIFO 的“长度”设置为 1。当然,您的驱动程序应该在初始化 UART 时这样做。

如果做不到这一点,我想你可以投票:(

于 2015-05-26T17:05:32.933 回答