飞卡日常进度之volatile的学习

volatile 英[ˈvɒlətaɪl] 本意是易变的。在C语言中是一种类型修饰符。

寄存器的读/写速度是远大于内存单位的读写的,编译器一般会选择把数据放在寄存器中二减少对内存单位的读写,从而可能读取到脏数据,即错误数据。

volatile 本质来说就是为了防止编译器对代码进行优化而没有执行指令或者执行有误!


单纯这样说,可能还是不够直观,举个例子,比如说我们常用到的IO口模拟单片机时序,来看一下下面的伪代码:

/*volatile*/ int *pPTA0_OUT = 0x400FF000u;

*pPTA0_OUT = 1;
*pPTA0_OUT = 0;

看第一句,如果不加volatile修饰的时候,编译器会认为两次对地址0x400FF000u进行写操作,而两次写入之间没有读取该地址的数据,认为第一次写入是无效的,故而忽略第一次的写入指令!

对于时序,这样的忽略也许就是致命的。

所以这种时候就很有必要加入volatile关键字了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ReCclay

如果觉得不错,不妨请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值