我有一个设备,它接收来自外部设备的多个中断,并最终向 ARM 处理器发送一个中断信号。我所做的是编写一个驱动程序,其中包含在操作系统中注册的 ISR。
ISR 的工作是检查寄存器,找出哪个外部设备正在触发中断,然后在通过寄存器写入清除外部中断之前采取一些适当的操作。
我注意到的一件事是我的 RTOS 提供了锁定和解锁 CPU 的所有中断的能力,但文档真正说的是要谨慎使用它。
在我的用例中使用类似的东西可以吗?或者说这让人皱眉?我设想的是 ISR 中的一个关键区域,在解锁 CPU 中断之前,我会在其中读取外部中断、传递它并清除它。我想这样做的原因是为了防止任何形式的潜在抢占,即使我还没有遇到任何问题。
ISR 中可以禁用中断(RTOS 切换任务时需要禁用中断)以保护关键代码。当然,正如你所说,需要谨慎使用,并且禁用中断的时间应该尽可能短。