关于嵌入式里的volatile

volatile修饰符主要目的是提示编译器该对象的值可能在编译器未检测到的环境下被改变,例如一个被系统时钟更新的变量,则该对象应该声明成volatile,则该编译器在执行某些例行化行为时就不能应用在被volatile修饰的变量上。

面试时的经典回答:一个定义为volatile的变量可能会被意想不到的改变,那么,编译器就不会去假设这个变量的值了 ,精确地说就是,优化器在用到这个变量的时候必须每次都小心的从内存中拿值,而不是使用保存在寄存器里的变量。

以下是使用volatile的几个例子:

1:并行设备的硬件寄存器(如状态寄存器)。

2:一个中断服务子程序中会访问到的非自动变量。

3:多线程应用中被几个任务共享的变量。

一个参数可以既是const又可以是volatile吗?一个指针可以是volatile吗?

可以,可以。

第一种情况,一个例子是只读状态寄存器。第二种情况是:一个中断服务子程序修改一个指向buffer的指针时。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值