我可以设置工作队列的优先级吗?我可以设置工作队列的优先级吗?
我正在修改SPI内核模块“spidev”,所以它可以更快地与我的硬件通信。 外部硬件是一个带有非常小缓冲区的CAN控制器,所以我必须快速读取任何传入数据以避免丢失数据。 我配置了一个GPIO中断来通知我新的数据,但我无法读取中断处理程序中的SPI硬件。 我的中断处理程序基本上设置了一个读取SPI数据的工作队列。 当内核中只有一个活动进程时,它工作正常。 只要我同时打开任何其他进程(甚至进程查看器顶部),我就开始丢失数据,也就是说,我可能会收到1000包没有问题的数据,然后连续丢失15个数据包上。 我怀疑我的问题的原因是,当其他进程(在本例中为top)控制中断处理程序运行的cpu时,但直到调度程序再次被调用时,workqueue中的工作才会执行。 我试图提高我的过程的优先顺序,但没有成功。
我想知道是否有办法告诉内核在中断处理函数后立即执行workqueue中的工作。 欢迎提出建议。
那么,为什么你不能从ISR内部存储输入数据呢? – 2013-03-25 08:47:27
http://lkml.indiana.edu/hypermail/linux/kernel/0510.2/1027.html – cnicutar 2013-03-25 08:47:59
看起来你需要RT操作系统,checkout RT Linux。 – stdcall 2013-03-25 09:36:33