【单片机】位域非原子写的风险

张开发
2026/5/30 7:44:07 15 分钟阅读
【单片机】位域非原子写的风险
单字节变量的写是原子操作但是位域比如a.bit0和a.bit1的写和“a”属于“读-改-写”。举个例子比如a.bit0和a.bit1现在a是0低优先级线程给a.bit0置1然后高优先级线程给a.bit1置1结束后发现a.bit0是1a.bit1是0。高优先级操作被覆盖了。先读出一个临时变量改完这个临时变量再将临时变量写回去原子操作问题无法用volatile处理。位域的非原子操作问题如果位域的各个bit之间没有关联可以用独立整数处理因为独立整数小于总线大小的写是原子操作。如果有关联位域就等价为一个结构体只能用锁处理。https://www.kdocs.cn/l/ccVU83rvWaXF

更多文章