【问题标题】:How do I change interrupt priority of serial driver so that it is higher priority than ethernet interrupt?如何更改串行驱动程序的中断优先级,使其优先级高于以太网中断?
【发布时间】: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


【解决方案1】:

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

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

它在windows上运行的原因是运气,如果你在windows上运行测试然后重载系统它仍然有效吗?我对此表示怀疑。在一个适当设计的实时系统中,无论系统负载如何,它都会始终工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-24
    • 1970-01-01
    相关资源
    最近更新 更多