一、学习笔记总结:Volatile关键字

        主要是总结自己日常学习到的重点知识。

        1、使用volatile定义一个变量。

         含义:优化器在用到这个变量时,必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。

        2、 volatile通常在以下几个地方使用:

        ①中断服务程序中修改的供其他程序检测的变量需要使用volatile;

        ②多任务环境下各任务间共享的标志也需要使用volatile;      

        ③存储器映射的硬件寄存器也要加volatile说明。

        3、一个参数既可以是volatile也可以是const:只读状态寄存器(它可以被改变,但程序不应该试图去修改它)。

        4、volatile 指针

        ①代码如下:

        volatile uint32_t *DataReg;

        上述代码中,volatile修饰的是指针所指内容。定义了一个uint32_t 类型的指针,这个指针指向的是一个volatile的对象,编译器必须保证对datareg的操作都不会被优化。

        指针变量本身并不是volatile的。如果对指针变量DataReg本身进行计算或赋值等操作,那么可能会被编译器优化,但对DataReg所指向内容的引用是不能进行编译器优化的。

        在驱动程序的开发中,对硬件寄存器指针的定义,通常都会采用该形式。

        ②另一种形式:

         uint32_t * volatile DataReg;

        上述代码中volatile修饰的是DataReg这个变量。这里实际上是定义了一个uint32_t 类型的指针,并且这个指针变量本身是volatile 的。但是指针所指的内容并不是volatile的。

        在实际使用时,编译器对指针变量DataReg本身的操作不会进行优化,但是对DataReg所指的内容会进行处理,对DataReg的操作还是会被优化。

        该写法通常用在对共享指针的声明上。将一个变量定义为volatile以后,编译器每次取指针变量值的时候都会从内存中载入,即便该变量已经被其他程序修改了,但在当前函数被使用的时候也可以得到修改后的值。

        

        

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值