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

单字节变量的写是原子操作,但是位域,比如a.bit0和a.bit1的写,和"a++"属于"读-改-写"。

举个例子,比如a.bit0和a.bit1,现在a是0,低优先级线程给a.bit0置1,然后高优先级线程给a.bit1置1,结束后发现,a.bit0是1,a.bit1是0。高优先级操作被覆盖了。

先读出一个临时变量,改完这个临时变量,再将临时变量写回去(原子操作问题无法用volatile处理)。

位域的非原子操作问题,如果位域的各个bit之间没有关联,可以用独立整数处理,因为独立整数(小于总线大小)的写是原子操作。如果有关联,位域就等价为一个结构体,只能用锁处理。

https://www.kdocs.cn/l/ccVU83rvWaXF

相关推荐
Ligocious30 分钟前
stm32---2.按键触发外部中断
stm32·单片机
rit843249935 分钟前
STM32F4 USB Host 功能实现
stm32·单片机·嵌入式硬件
金戈鐡馬1 小时前
定时器+中断优化单总线通信
stm32·单片机·嵌入式硬件
cici158741 小时前
STM32 + VS1003/VS1053 MP3播放器SD卡读取程序
stm32·单片机·嵌入式硬件
念一不念二2 小时前
[SSD]SSD主控
嵌入式硬件
xiangw@GZ2 小时前
DDR3 颗粒信号定义解析
单片机·嵌入式硬件
小+不通文墨2 小时前
在树莓派中部署emqx
经验分享·笔记·单片机·学习
Deitymoon2 小时前
STM32——oled显示字符串和数字
stm32·单片机·嵌入式硬件
深圳市晨芯阳科技有限公司3 小时前
带延时功能的电压检测系列晨芯阳HC809
单片机·嵌入式硬件·电源芯片·深圳市晨芯阳科技有限公司
xiangw@GZ3 小时前
DDR2 / DDR3 / DDR4 颗粒信号差异对照表
单片机·嵌入式硬件