Serial port 如何更改串行驱动程序的中断优先级,使其高于以太网中断?

Serial port 如何更改串行驱动程序的中断优先级,使其高于以太网中断?,serial-port,linux-device-driver,Serial Port,Linux Device Driver,我正在以460800波特率运行串行端口。数据连续发送。串行驱动程序数据被传递到用户空间应用程序,用户空间应用程序使用套接字将数据发送到网络应用程序。有时,我会遇到串行驱动程序HW Fifo溢出,因为运行ISR或其他中断(我只有以太网、串行和gp_定时器中断)需要的时间太长。此外,我认为在某些情况下,以太网和串行中断都在中断队列中(我的假设),以太网驱动程序中断优先于串行驱动程序中断,同时串行驱动程序HWFIO溢出 在我禁用数据传输到网络应用程序的那一刻,用户空间中的所有数据都接收良好。这让我相信

我正在以460800波特率运行串行端口。数据连续发送。串行驱动程序数据被传递到用户空间应用程序,用户空间应用程序使用套接字将数据发送到网络应用程序。有时,我会遇到串行驱动程序HW Fifo溢出,因为运行ISR或其他中断(我只有以太网、串行和gp_定时器中断)需要的时间太长。此外,我认为在某些情况下,以太网和串行中断都在中断队列中(我的假设),以太网驱动程序中断优先于串行驱动程序中断,同时串行驱动程序HWFIO溢出

在我禁用数据传输到网络应用程序的那一刻,用户空间中的所有数据都接收良好。这让我相信可能是以太网驱动程序导致了问题

我想更改串行中断的优先级,以便它在以太网驱动程序中断之前得到服务。你认为改变优先级能解决问题吗


我使用的是Linux 2.6.32 ARMV7。

我不确定哪种版本的补丁更适合尝试,我会说先应用版本2.6.33,如果补丁应用没有问题,那么就使用它,如果不适用,那么就尝试2.6.31补丁

这些补丁的缺点是它使linux可抢占,所以你必须小心,因为你永远不知道什么时候你会被换掉。这意味着使用互斥来保护线程之间共享的数据。如果你明白自己在做什么,这不是什么大问题


它在windows上运行的原因是运气好,如果在windows上运行测试,然后系统负载过重,它还能工作吗?我对此表示怀疑。在设计合理的实时系统中,无论系统负载如何,它都能正常工作

我不确定哪个版本的补丁更适合尝试,我会说先应用版本2.6.33,如果补丁应用没有问题,那么就使用它,如果它们不应用,那么尝试2.6.31补丁

这些补丁的缺点是它使linux可抢占,所以你必须小心,因为你永远不知道什么时候你会被换掉。这意味着使用互斥来保护线程之间共享的数据。如果你明白自己在做什么,这不是什么大问题


它在windows上运行的原因是运气好,如果在windows上运行测试,然后系统负载过重,它还能工作吗?我对此表示怀疑。在设计合理的实时系统中,无论系统负载如何,它都能正常工作

您有一个实时问题,但您没有使用实时系统来解决它。查看linux的实时修补程序,或者使用实时操作系统或专用裸机处理器来处理串行端口并为您提供额外的缓冲。@Chris我选中了实时修补程序选项,但不适用于2.6.32,我仍然可以应用2.6.33或2.6.31中的修补程序吗?哪一个是更好的选择?另外,应用RT补丁有什么缺点吗?你认为所涉及的努力程度如何?另一个问题是,我们是否能够在windows机器上读取数据而不会出现问题?这让我相信我们不需要RT补丁。但是,我可能错了,你能解释一下吗?你有一个实时问题,但你没有使用实时系统来解决它。查看linux的实时修补程序,或者使用实时操作系统或专用裸机处理器来处理串行端口并为您提供额外的缓冲。@Chris我选中了实时修补程序选项,但不适用于2.6.32,我仍然可以应用2.6.33或2.6.31中的修补程序吗?哪一个是更好的选择?另外,应用RT补丁有什么缺点吗?你认为所涉及的努力程度如何?另一个问题是,我们是否能够在windows机器上读取数据而不会出现问题?这让我相信我们不需要RT补丁。但是,我可能错了,你能解释一下吗?