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

单字节变量的写是原子操作,但是位域,比如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

相关推荐
hahaha601633 分钟前
Shades-of-Gray (SoG) 算法--白平衡算法
人工智能·嵌入式硬件·算法·计算机视觉
ebiobiz44 分钟前
极海 APM32 使用 Nimmake 编译指南
c++·python·单片机·嵌入式硬件·mcu
小神兵2 小时前
对电压源与电流源的的简单理解
单片机·嵌入式硬件·物联网
comyccccc3 小时前
三极管与MOS管工作原理全解析学习笔记
单片机·嵌入式硬件
FPGA小徐4 小时前
运放电路:负载必须接地时,如何做电流采样(浮地负载 vs 接地负载)
单片机·嵌入式硬件
木白CPP4 小时前
USB(一): USB 概述&&介绍
linux·网络·嵌入式硬件
木白CPP6 小时前
USB(二):USB设备枚举过程
嵌入式硬件
女神下凡6 小时前
芯参谋(37):EEPROM_电路设计指南
arm开发·单片机·嵌入式硬件·fpga开发·设计规范
沐欣工作室_lvyiyi7 小时前
基于云平台的输液智能监测控制系统设计与实现(论文+源码)
stm32·单片机·单片机毕业设计·电子信息工程毕业设计
EatFan8 小时前
当 CubeMX 遇上 AI Agent:用 MCP 让 AI 直接生成 STM32 HAL 工程
人工智能·stm32·嵌入式硬件·cubemx·stm32cubemx·hal·mcp