当前位置: 首页 > news >正文

Flash操作 原子写 非原子写

原子和非原子操作

读、修改、写操作

对一个变量 A 1或上0x01,C语言写法:

A 1|= 0x01;
通过编译转成汇编后:

LOAD R1,[#A 1] ; Read a value from A 1 into R1
MOVE R2,#0x01 ; Move the absolute constant 1 into R2
OR R1,R2 ; Bitwise OR R1 (A 1) with R2 (constant 1)
STORE R1,[#A 1 ]; Store the new value back to A 1
第1句,从A 1的地址读取数据,保存到R1;(读操作)

第2句,把0x01保存到R2;(读操作)

第3句,R1和R2进行或操作,并存入R1;(修改操作)

第4句,把R1的值保存到A 1的地址去。(写操作)

这就叫非原子操作,因为他使用了超过一条的汇编指令,并且可以被中断(相反,只用到一条指令的,无法中断的称作原子操作)。更新一个结构体的多个成员,或者更新一个大于CPU结构的字长(例如,在16位机器上更新一个32位变量)的变量,都是非原子操作的例子。如果中断,可能会导致数据丢失或损坏。

http://www.lryc.cn/news/501186.html

相关文章:

  • 厦门凯酷全科技有限公司怎么样?
  • ubuntu 18.04设置命令行历史记录并同时显示执行命令的时间
  • 推荐系统里面的多任务学习概述
  • 解决uview ui赋值后表单无法通过验证
  • 【GL010】C/C++总结(二)
  • 【合作原创】使用Termux搭建可以使用的生产力环境(五)
  • 初始数据结构
  • 给我的小程序加了个丝滑的搜索功能,踩坑表情包长度问题
  • MATLAB中的合并分类数组
  • ShardingSphere-JDBC
  • 企业如何选择远程控制软件来远程IT运维?
  • Meta Llama 3.3 70B:性能卓越且成本效益的新选择
  • 【银河麒麟高级服务器操作系统】修改容器中journal服务日志存储位置无效—分析及解决方案
  • go语言zero框架对接阿里云消息队列MQ的rabbit的配置与调用
  • 《Vue进阶教程》第四课:reactive()函数详解
  • 【开源】A065—基于SpringBoot的库存管理系统的设计与实现
  • memmove函数(带图详解)
  • 【Java数据结构】时间和空间复杂度
  • 八斗深度学习
  • 安卓报错Switch Maven repository ‘maven‘....解决办法
  • Scala编程技巧:正则表达式与隐式转换
  • UnityShaderLab 实现黑白着色器效果
  • 在Windows 10中使用SSH远程连接服务器(附花生壳操作方法)
  • 在算网云平台云端在线部署stable diffusion (0基础小白超详细教程)
  • ubuntu存储空间不足快速解决
  • Prescan simulink carsim联合仿真平台搭建问题总结
  • STM32(HAL_工程模板的搭建)
  • Flask入门一(介绍、Flask安装、Flask运行方式及使用、虚拟环境、调试模式、配置文件、路由系统)
  • CAD C# 批量替换当前图中块
  • Android -- [SelfView] 自定义多行歌词滚动显示器