我正在尝试对 stm32 进行编程并使用事件驱动架构。例如,当发生定时器中断时,我将切换一个引脚,并在发生 ADC DMA 缓冲区满中断时将一些数据传输到外部闪存等等。
将有多个中断源,每个中断源具有相同的优先级,从而禁用嵌套。
我将使用中断来设置一个标志来通知我的 main 发生了中断并在 main 中处理数据。ISR 内部不会有处理/指令。
困扰我的是,从长远来看,在 main 和 ISR 中访问变量(在这种情况下为标志)可能会导致竞争条件错误。
所以我想使用循环事件队列而不是标志。
只有 ISR 能够写入事件队列缓冲区并增加“head”。只有 main 能够读取事件队列(并根据事件执行指令)并增加“tail”。
由于 ISR 嵌套被禁用,并且每个 ISR 将访问事件队列数组的不同元素,并且主函数只会在事件队列上有新事件时做出反应,所以避免了竞争条件对吗?还是我错过了什么?
如果我做错了什么,请纠正我。
谢谢你。