0%

volatile关键字

volatile: 易变的

https://blog.csdn.net/huhuandk/article/details/92771038 C语言中volatile关键字的作用

volatile作用

访问寄存器要比访问内存单元快的多,所以编译器一般都会作减少存取内存的优化,但有可能会读脏数据

  • 当要求使用volatile声明变量值的时候,系统总是重新从它所在的内存读取数据,即使它前面的指令刚刚从该处读取过数据。
  • 遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问;
  • 如果不使用valatile,则编译器将对所声明的语句进行优化。

使用volatile变量的几个场景

  1. 中断服务程序中修改的供其它程序检测的变量需要加volatile
  2. 多任务环境下各任务间共享的标志应该加volatile
  3. 存储器映射的硬件寄存器通常也要加voliate,因为每次对它的读写都可能有不同意义

Question

  1. 一个参数既可以是const还可以是volatile吗?

可以的,例如只读的状态寄存器。它是volatile因为它可能被意想不到地改变。它是const因为程序不应该试图去修改它。

  1. 一个指针可以是volatile 吗?

可以,当一个中断服务子程序修该一个指向一个buffer的指针时