linux中的串行缓冲区有多长?

时间:2015-05-26 15:38:33

标签: c buffer uart tty termios

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

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

2 个答案:

答案 0 :(得分:0)

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

如果您无法使用线程,则可以使用select

答案 1 :(得分:0)

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

如果做不到这一点,我想你可以推测它:(