搜索

[MCU] Valatile关键字

[复制链接]
207|34
 楼主 | 2020-7-4 15:51 | 显示全部楼层 ||阅读模式
C语言中Valatile关键字有什么用?

使用特权

评论回复
| 2020-7-4 15:59 | 显示全部楼层
使用Valatile申明的变量是动态变量,每次使用这个变量的值时都必须从对应存储空间取出它的最新值

使用特权

评论回复
| 2020-7-4 16:02 | 显示全部楼层
是的,而不使用寄存器中的景象。

使用特权

评论回复
| 2020-7-4 16:06 | 显示全部楼层
其实就是告诉编译器,不要对此变量进行优化

使用特权

评论回复
| 2020-7-4 16:09 | 显示全部楼层
Valatile的作用   在CCS中起关键作用

使用特权

评论回复
| 2020-7-4 16:13 | 显示全部楼层
volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。

使用特权

评论回复
| 2020-7-4 16:26 | 显示全部楼层
如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。

使用特权

评论回复
| 2020-7-4 16:29 | 显示全部楼层
需要注意的是,没有volatile也可能能正常运行,但是可能修改了编译器的优化级别之后就又不能正常运行了。因此经常会出现debug版本正常,但是release版本却不能正常的问题。所以为了安全起见,只要是等待别的程序修改某个变量的话,就加上volatile关键字。

使用特权

评论回复
| 2020-7-4 16:32 | 显示全部楼层
这个在DSP中用的非常多

使用特权

评论回复
| 2020-7-4 16:35 | 显示全部楼层
是volatile,不是Valatile

使用特权

评论回复
| 2020-7-4 16:54 | 显示全部楼层
关键字 volatile 是与 const 绝对对立的。

使用特权

评论回复
| 2020-7-4 16:57 | 显示全部楼层
加了 volatile 修饰,则会从内存重新装载内容

使用特权

评论回复
| 2020-7-4 17:01 | 显示全部楼层
volatile 的作用 是作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值。

使用特权

评论回复
| 2020-7-4 17:05 | 显示全部楼层
volatile总是与优化有关

使用特权

评论回复
| 2020-7-4 17:08 | 显示全部楼层
存储器映射的硬件寄存器通常也要加 voliate,因为每次对它的读写都可能有不同意义。

使用特权

评论回复
| 2020-7-4 17:14 | 显示全部楼层
DSP将寄存器变量都映射到相应的寄存器地址,因此经常会见到这样声明的语句

使用特权

评论回复
| 2020-7-4 17:18 | 显示全部楼层
volatile提醒编译器它后面所定义的变量随时都有可能改变

使用特权

评论回复
| 2020-7-4 17:21 | 显示全部楼层
如果没有volatile关键字,则编译器可能优化读取和存储

使用特权

评论回复
| 2020-7-4 17:25 | 显示全部楼层
volatile的本意是“易变的” 由于访问寄存器的速度要快过RAM,所以编译器一般都会作减少存取外部RAM的优化

使用特权

评论回复
| 2020-7-4 17:29 | 显示全部楼层
volatile 可以保证对特殊地址的稳定访问。

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

在线客服 快速回复 返回顶部 返回列表