信号量与ISR中的同步(中断服务程序)

时间:2017-05-29 15:54:09

标签: c semaphore interrupt

我有一个队列,当发生不同的中断时,会调用队列的put和pull函数。在这种情况下,有没有办法防止竞争条件? 虽然我们不能在中断服务程序中等待信号量,但创建类似功能的最佳方法是什么。 我们正在使用Zynq FPGA的ARM-Cortex A5处理器来开发代码。

1 个答案:

答案 0 :(得分:2)

假设每个中断导致处理器的“中断禁用”状态被打开,并假设您正在处理的中断具有相同的优先级(即,不能中断另一个的执行),那时已经没有竞争条件,你的ISR只能访问共享队列。

(当发生中断时,处理器进入中断禁用模式,将所有寄存器压入堆栈,跳转到ISR入口点并继续执行。一旦ISR完成,“iret”指令反向执行这个简单的描述可以在不同的处理器和平台中以不同的方式实现。)