volatile 关键字

一  查查字典

volatile  易失的 ,可变的 ,挥发性的,不稳定的

二  查C语言语法

A volatile  variable is one whose value may be change outside the normal  program flow

在正常的程序之外有可能发生改变的一种变量

什么叫正常的程序流程:

我们用int  用 char  类型声明一个变量,这个变量给他赋了个值等于3或者等于5,如果程序往下执行的语句当中,没有再给变量再赋新值 ,是不是这个变量的不会变,他应该还是3 还是5,否则就出问题了对吧

 

 

可是寄存器不是这样的的

寄存器(比如 GPIOD_PDIR寄存器)他的值不是一个数值或者一个变量 ,他是一个地址映射像一个储存空间,但他并不是存储器,他的值是电路,外面接的是引脚,他反应的是外面的引脚接了一个按键,被按下或者没有按下,电压是高还是低,他的值是跟着外部电路变的。

 

所以如果我们 写一句话,对外部的输入引脚,读他的值,检测外面的按键有没有被按下,然后循环一段时间再读一次

(定时检查有没有按下 这个键)   把这句话写在代码中,功能是非常清晰的,如果c语言他的编译器不知道这是一个 Volatile

(或者说是一个寄存器)那么把编译器的优化选项打开(开到最高一档的优化)就是让我们的代码尽可能的简短,用的空间尽可能的小,执行的速度尽可能的块,然后编译器就会非常smart的认为这个变量,这个人为什么没有在给变量赋新值的时候读他一下,然后delay 一段时间又读他一下,那一个变量没有赋新值,读他两下这个浪费时间的操作编译器就会把他优化掉,

这个时候如果看编译器生成的汇编代码,只剩下了读取一次,于是程序运行就不正常了

 

所以使用valotile 关键字,放在变量的前面

volatile char value;

使编译器知道,如果没有改变值,他自身会改变,易失型的变量,在优化的时候,应该跳过去

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值