2

我正在一个没有操作系统的 ARM 微控制器上开发一个小型嵌入式系统。它有几种不同类型的中断发生(按钮按下、A 到 D 转换、定时器等)并且只有一个线程在运行。

我想要一个 FIFO 事件队列来处理,其中每个中断服务例程将其事件添加到队列中,并且主(也是唯一的)线程从队列中删除要处理的事件。显然在中断服务例程中访问队列数据结构是危险的,但是自旋锁会导致死锁,因为如果主线程有锁并且发生中断,ISR 将永远等待锁。

当然,我已经知道我可以在主线程处理队列时禁用中断,但这并不理想。

在这里进行的最佳方式是什么?

谢谢

4

1 回答 1

0

如果你可以使用固定大小的环形队列,你不需要任何复杂的东西(我假设中断在 ISR 中被禁用),因为只有一个读取器——你的内核线程——更新尾指针,还有一个写入器— ISR — 更新头指针。否则使用加载链接/存储条件指令来实现无锁队列

于 2012-12-24T08:28:13.320 回答