volatile: 易变的
https://blog.csdn.net/huhuandk/article/details/92771038 C语言中volatile关键字的作用
volatile作用
访问寄存器要比访问内存单元快的多,所以编译器一般都会作减少存取内存的优化,但有可能会读脏数据
- 当要求使用volatile声明变量值的时候,系统总是重新从它所在的内存读取数据,即使它前面的指令刚刚从该处读取过数据。
- 遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问;
- 如果不使用valatile,则编译器将对所声明的语句进行优化。
使用volatile变量的几个场景
- 中断服务程序中修改的供其它程序检测的变量需要加volatile
- 多任务环境下各任务间共享的标志应该加volatile
- 存储器映射的硬件寄存器通常也要加voliate,因为每次对它的读写都可能有不同意义
Question
- 一个参数既可以是const还可以是volatile吗?
可以的,例如只读的状态寄存器。它是volatile因为它可能被意想不到地改变。它是const因为程序不应该试图去修改它。
- 一个指针可以是volatile 吗?
可以,当一个中断服务子程序修该一个指向一个buffer的指针时