-
avr_atomic_demo:展示中断与原子竞争条件故障的实例
资源介绍
avr_atomic_demo
演示中断和原子性/竞争条件失败的问题
什么?
这是一个快速演示,说明了为什么您不希望在中断服务程序(ISR)和AVR上的代码主体之间共享16位变量,除非您知道自己在做什么。
有关详细说明,请参阅。
(TL; DR:如果您不想知道自己在做什么,只需将其包装在ATOMIC_BLOCK 。)
真的不行吗?
将代码闪烁到AVR中,并注意LED闪烁。 现在查看代码,看看是否可以找出原因。
ISR正在0x2222和0x7777之间更改变量。 我们将该全局变量复制到另一个局部变量中,并且仅当该局部变量的值为0x2277或0x7722时,LED才会点亮。 但是,LED仍在闪烁。 发生了严重错误。
头是,由于它是8位计算机上的16位变量,因此将其复制需要两条机器语言指令,并且在我们进行分配的一半时,中断可以更改该变量。 啊哈! 但这不太可能,对吧? 看一下闪烁的