尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
volatile 关键字整理(嵌入式 C 标准)
一、核心本质volatile是编译期修饰符不改变变量本身任何固有属性仅约束编译器的代码优化行为。 含义提示编译器该变量的值可能被程序外部中断、硬件外设、其他线程异步修改不可缓存、不可删减读写操作。二、volatile 不会改变的变量固有属性数据类型volatile uint32_t data底层仍是 uint32_t运算、大小、取值规则不变。存储区域与生命周期局部 volatile 变量存栈、全局 / 静态 volatile 存全局区存储分配、生命周期、作用域不受修饰符影响。内存读写权限只读由const控制volatile 仅管优化volatile const硬件只读寄存器二者分工独立互不干涉。内存对齐、变量地址不改变对齐规则、不修改变量分配地址。运行时硬件标识仅影响编译阶段生成汇编CPU 运行时无特殊硬件标记不提供原子操作、互斥同步能力。三、volatile 仅修改的编译器优化规则禁止把变量值缓存到通用寄存器每次读写强制访问原始内存地址禁止删除看似 “无效” 的读写如轮询硬件状态寄存器的空循环禁止对该变量相关内存访问指令做重排、合并、化简。四、标准三大使用场景中断服务函数中共享的全局变量主循环轮询中断置位标志若无 volatile主线程缓存值会无法感知中断更新。volatile uint8_t int_flag; void ISR(void) { int_flag 1; } while(!int_flag);多线程间共享全局变量解决编译器缓存带来的可见性问题仅保证每次读内存不解决多线程竞态并发写仍需锁 / 原子操作。内存映射硬件外设寄存器IO、串口、状态寄存器等硬件地址每次读写对应硬件动作绝对不能被优化。// 只读硬件寄存器 #define UART_STATUS (*((volatile const uint32_t *)0x40001000))五、指针修饰区分高频易错点volatile uint32_t *p; // *p 指向的内容禁止优化指针p本身可缓存 uint32_t * volatile p; // 指针p自身禁止优化*p无volatile约束 volatile uint32_t * volatile p; // 指针、指向内容均禁止优化六、常见误区总结volatile ≠ 线程安全只解决编译器缓存可见性不提供并发保护不可滥用普通局部 / 无外部修改全局变量加 volatile 会频繁访问内存降低运行效率不能替代 const只读硬件寄存器必须搭配volatile const无法保证指令执行顺序、原子读写多线程并发写需配套互斥机制。七、一句话总结volatile 只修改编译器优化策略变量类型、存储、读写权限完全不变作用是强制每次访问内存适配中断、多线程、硬件寄存器三类异步修改场景。
RELATED

相关推荐

两块4K屏折进一个底座:一个程序员的桌面折腾实录

两块4K屏折进一个底座:一个程序员的桌面折腾实录

写在前面 博主是做大数据的,干了六七年。现在在一家公司做财务方面的数据。每天的工作状态大概是这样的:IDEA里开着几个工程,Xshell挂着测试环境的日志。浏览器呢,十几个标签页起步。一半是文档,一半是工作的云页面。然…

📅 2026/10/21 20:44:37
PyWxDump 完全指南:在电脑上解密微信聊天记录并导出成可读文件

PyWxDump 完全指南:在电脑上解密微信聊天记录并导出成可读文件

PyWxDump 完全指南:在电脑上解密微信聊天记录并导出成可读文件 【免费下载链接】PyWxDump 删库 项目地址: https://gitcode.com/GitHub_Trending/py/PyWxDump PyWxDump 是一款做微信聊天记录解密的免费命令行工具:从微信 PC 端进程内存中取回密钥…

📅 2026/10/21 20:44:37
Codex 一键安装三强版,不用折腾环境,本地桌面 AI 保姆教程

Codex 一键安装三强版,不用折腾环境,本地桌面 AI 保姆教程

💡前言 很多朋友在 Windows 上体验桌面 AI 智能体时,常常会遇到任务执行黑盒化、修改无法追溯、缺少定时调度、插件扩展能力有限等问题。如果你已经试过同类工具,正在寻找一套稳定性更强、操作全程可审查、功能覆盖面更广的本地自动化方案&a…

📅 2026/10/21 20:44:37
MORE NEWS

更多资讯

📰

大模型推理的周期性建模:从循环检测到干预策略的工程实践

最近对2025年NIPS上的一个题目印象很深——"Reasoning is Periodicity? Improving Large Language Models Through Effective Periodicity Modeling"。看到这个标题的时候我愣了一下,因为"推理"和"周期性"这两个词平时很难被放到一起…

📰

Delphi 12串口通信控件深度解析:线程安全、协议解析与Win11兼容

简介:这是一套专为Delphi 12开发者提供的高性能串口通信控件库——nrCommLib Pro v9.54完整源码包,适用于工业自动化、仪器仪表、嵌入式设备联调等需稳定串口交互的中高级开发场景。资源共462个文件,涵盖95个Pascal源码(.pas&…

📰

AI短剧创作系统自研与贴牌合作:技术拆解与变现全攻略

1. 别急着拍脑袋,先看清“自研贴牌”这套玩法的真正价值这两年AI短剧有多火,不用我多说。传统平台动辄抽走五成甚至更高的分成,让不少创作者辛苦一场,最后到手的钱打了个大折扣。于是越来越多团队把目光转向“自研AI短剧创作系统贴…

📰

AI短剧平台抽成太狠?自研创作系统贴牌合作,把收益握在自己手里

我有个做AI短剧的朋友,最近跟我算了一笔账:一部短剧在某主流AI短剧平台上分账1000元,七扣八扣,到手不到300元。平台抽成、流量服务费、提现手续费层层叠加,做得越多越觉得自己在给平台打工。后来他换了个思路&#xff…

📰

Flutter鸿蒙跨平台适配实战:从零搭建到真机运行

最近在折腾 Flutter 跨平台开发时,我顺手把一个“笑话大全”应用做成了鸿蒙可运行的版本。整个过程比预想的有意思:Flutter 写页面和业务逻辑的时候,完全感觉不到鸿蒙的存在;但一旦落到工程配置、权限声明、签名打包,就…

📰

Docker+WordPress阿里云部署实战:从零搭建高可用个人博客

1. 为什么现在还要亲手搭一个 WordPress 博客?不是有现成的平台吗? “dockerwordpress搭建个人博客(如何在阿里云服务器上线部署个人博客)”——这个标题背后,藏着一群正在悄悄回归技术掌控权的人。不是他们不信公众号…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬