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

时间:2013-01-11 20:09:27

标签: serial-port linux-device-driver

我以460800波特率运行串口。数据连续发送。串行驱动程序数据传递给用户空间应用程序,后者使用套接字将数据发送到网络应用程有时,我得到串行驱动程序HW Fifo溢出,因为它要么花费太长时间来运行ISR或其他中断(我只有以太网,串行和gp_timer中断)。另外,我认为有些情况下以太网和串行中断都在中断队列中(我的假设),以太网驱动程序中断优先于串行驱动程序中断,同时串行驱动程序HWFIFO溢出。

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

我想更改串行中断的优先级,以便在以太网驱动程序中断之前提供服务。您认为改变优先级会解决问题吗?

我在Linux 2.6.32 ARMV7上。

1 个答案:

答案 0 :(得分:1)

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

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

它在Windows上工作的原因是运气,如果你在Windows上运行测试,然后大量加载系统它仍然有效吗?我对此表示怀疑。在设计合理的实时系统中,无论系统负载如何,它都将始终有效。