ISR(中断服务例程)中类似信号量的同步
semaphore like synchronization in ISR (Interrupt service routine)
我有一个队列,当不同的中断发生时调用队列的put和pull函数。在这种情况下有没有办法防止竞争条件?
虽然我们不能在中断服务例程中等待信号量,但创建类似功能的最佳方法是什么。
我们正在使用 Zynq FPGA 的 ARM-Cortex A5 处理器来开发代码。
假设每个中断都会导致处理器的"Interrupt Disabled"状态开启,并且假设你正在处理的中断具有相同的优先级(即不能打断其他),那么已经没有竞争条件,您的 ISR 只能访问共享队列。
(当中断发生时,处理器进入中断禁用模式,将所有寄存器压入堆栈,跳转到 ISR 入口点并在那里继续执行。一旦 ISR 完成,"iret" 指令执行与条目相反的操作。这个简单的描述可以在不同的处理器和平台上以不同的方式实现。)
我有一个队列,当不同的中断发生时调用队列的put和pull函数。在这种情况下有没有办法防止竞争条件? 虽然我们不能在中断服务例程中等待信号量,但创建类似功能的最佳方法是什么。 我们正在使用 Zynq FPGA 的 ARM-Cortex A5 处理器来开发代码。
假设每个中断都会导致处理器的"Interrupt Disabled"状态开启,并且假设你正在处理的中断具有相同的优先级(即不能打断其他),那么已经没有竞争条件,您的 ISR 只能访问共享队列。
(当中断发生时,处理器进入中断禁用模式,将所有寄存器压入堆栈,跳转到 ISR 入口点并在那里继续执行。一旦 ISR 完成,"iret" 指令执行与条目相反的操作。这个简单的描述可以在不同的处理器和平台上以不同的方式实现。)