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

论在中断中的标志变量使用volatile的重要性分析

volatile关键字的学习

背景分析

在使用stm32时,我使用中断的方式发送数据,我使用HAL_UART_Transmit_IT发送数据,发送后使用send_busy表示发送忙,由于串口中断发送太快,以至于send_busy=1忙标志没有写入内存中,中断已经将send_busy=0;最后的结果就是,我发送2帧数据,只有第一帧发送出去了

理想的正常读写顺序:

  1. main中读取send_busy的值到cpu寄存器
  2. main中CPU改写值send_busy=1
  3. main中将send_busy的值写入到send_busy内存中
  4. 中断读取send_busy的值到cpu寄存器
  5. 中断改写值send_busy=0
  6. 中断将send_busy的值写入到send_busy内存中
  7. 结果是0

实际的读写顺序

  1. main中读取send_busy的值到cpu寄存器
  2. main中CPU改写值send_busy=1
  3. 中断读取send_busy的值到cpu寄存器
  4. 中断改写值send_bus
http://www.xdnf.cn/news/472807.html

相关文章:

  • 基于EtherCAT与ABP vNext 构建高可用、高性能的工业自动化平台
  • 双重差分模型学习笔记4(理论)
  • ip命令详解
  • HPC软件使用之ANSYS Fluent
  • Git-学习笔记(粗略版)
  • SpringBoot中的Lombok库
  • Python模块化编程
  • 俄罗斯方块算法
  • 2025年长三角+山东省赛+ 认证杯二阶段资料助攻说明
  • 简单网络交换、路由-华三MVRP
  • Linux动态库热加载:动态库与主程序符号调用机制总结
  • 6、登录功能后端开发
  • MobaXterm 25.2中文汉化版优秀的远程桌面管理软件
  • vue2 根据不同路由url设置不同的网页背景颜色
  • 企业EcoVadis评估问卷实战指南:步骤拆解与避坑策略
  • centos7 基于yolov10的推理程序环境搭建
  • 多语言支持的常见设计方案
  • C语言-指针函数和函数指针
  • 【Linux】网络基础与socket编程基础
  • 深入理解JavaScript中的闭包:原理、应用与常见问题
  • 【stata】xtreg VS reghdfe
  • 位运算题目:找到最接近目标值的函数值
  • 新手入门系列-springboot项目初体验
  • C盘清理秘籍:快速提升系统性能
  • Python 调试扩展版本兼容问题解决纪实
  • 在自动化脚本中使用找色实现精确定位目标区域
  • docker 学习记录
  • uniapp x
  • 软件安全测试报告:检测商业软件安全性,发现潜在风险点?
  • 修复“ImportError: DLL load failed while importing lib: 找不到指定的程序”笔记