Linux 如何使用c++;
我有个大问题。目前,我正在通过以下挂钩访问串行端口:Linux 如何使用c++;,linux,serial-port,Linux,Serial Port,我有个大问题。目前,我正在通过以下挂钩访问串行端口: fd = open( "/dev/ttyS1", O_RDWR | O_NOCTTY ) 然后,我使用下面的代码块从中读取 i = select( fd + 1, &rfds, NULL, NULL, &tv ) ... iLen = read( fd, buf, MAX_PACKET_LEN ) 问题是,在阅读之前,我需要检测是否存在缓冲区溢出。串行端口级和内部tty翻转缓冲区 我们尝试了cat/proc/tty/dri
fd = open( "/dev/ttyS1", O_RDWR | O_NOCTTY )
然后,我使用下面的代码块从中读取
i = select( fd + 1, &rfds, NULL, NULL, &tv )
...
iLen = read( fd, buf, MAX_PACKET_LEN )
问题是,在阅读之前,我需要检测是否存在缓冲区溢出。串行端口级和内部tty翻转缓冲区
我们尝试了cat/proc/tty/driver/serial
,但似乎没有列出超限(见下面的输出)
根据内核源代码,您应该使用TIOCGICOUNT ioctl。第三个ioctl参数应该是指向
中定义的以下结构的指针:
/*
* Serial input interrupt line counters -- external structure
* Four lines can interrupt: CTS, DSR, RI, DCD
*/
struct serial_icounter_struct {
int cts, dsr, rng, dcd;
int rx, tx;
int frame, overrun, parity, brk;
int buf_overrun;
int reserved[9];
};
我不知道是否每个车手都能检测到所有情况。黑暗圣堂武士
您的串行驱动程序应更新icount.frame/overflow错误
serial_core中的struct uart_port.h具有成员struct uart_icount,应根据接收到的中断在平台串行设备驱动程序中进行更新。嘿,谢谢你,但我们的系统似乎没有更新“Overflow”和“buf_Overflow”字段。知道为什么吗?
/*
* Serial input interrupt line counters -- external structure
* Four lines can interrupt: CTS, DSR, RI, DCD
*/
struct serial_icounter_struct {
int cts, dsr, rng, dcd;
int rx, tx;
int frame, overrun, parity, brk;
int buf_overrun;
int reserved[9];
};