对于在主循环中可读可写,但在ISR中为只读的变量,是否需要volatile
?
编辑:在main中写入时,ISR被禁用。因此,该变量得到了有效的原子使用。
编辑:(非常相关):
发布于 2019-03-06 04:52:45
volatile
不是同步访问的好方法。这是一个优化障碍,但仅此而已。
some_type
在没有本地64位数据类型的平台上是uint64_t
时,可能只有一部分被读取。例如。main() irq() /*初始化*/ var0..31 =4var32..63=8 /*修改*/ var32..63 = 23 /*读取*/ a_hi = var32..64 = 32 a_lo = var0..31 =4var0..31=42
main
和irq
在具有专用缓存的不同内核上运行时,irq
将永远不会看到更新值第一个问题需要锁定,但锁定操作通常意味着优化障碍,因此volatile
是多余的。
第二个问题也是如此,其中内存障碍也是优化障碍。
volatile
对于实现对处理器内存的访问很有用(这可能会在两次读取之间发生变化,或者在写入时产生副作用)。但通常情况下,它是不需要的,而且太贵了。
https://stackoverflow.com/questions/54965075
复制相似问题