【发布时间】:2013-01-11 20:09:27
【问题描述】:
我正在以 460800 波特率运行串行端口。数据连续发送。串行驱动程序数据被传递给用户空间应用程序,用户空间应用程序使用套接字将数据发送到网络应用程序。有时,我得到串行驱动程序 HW Fifo 溢出,因为运行 ISR 或其他中断需要太长时间(我只有以太网、串行和 gp_timer 中断)。另外,我认为在某些情况下以太网和串行中断都在中断队列中(我的假设)并且以太网驱动程序中断优先于串行驱动程序中断,同时串行驱动程序 HWFIFO 溢出。
当我禁用向网络应用程序的数据传输时,用户空间的所有数据都可以正常接收。这让我相信它可能是导致问题的以太网驱动程序。
我想更改串行中断的优先级,使其在以太网驱动程序中断之前得到服务。你认为改变优先级会解决问题吗?
我使用的是 Linux 2.6.32 ARMV7。
【问题讨论】:
-
您有一个实时问题,但您没有使用实时系统来解决它。要么查看 linux 的实时补丁,要么使用实时操作系统或专用裸机处理器来处理串行端口并为您提供额外的缓冲。
-
@Chris 我检查了实时补丁选项,但不适用于 2.6.32,我还能应用 2.6.33 或 2.6.31 的补丁吗?哪一个会是更好的选择? link另外,应用 RT 补丁有什么缺点吗?您如何看待所涉及的努力程度?其他问题,我有我们能够在 Windows 机器上毫无问题地读取数据吗?这让我相信我们不需要 RT 补丁。但是,我可能错了,您能否也对此有所了解?
标签: serial-port linux-device-driver