我想知道这是否可行以及可以应用这样的事情。我在某个地方被问到了这个问题,我的想法是你会得到一个const,你知道它的价值不会改变,或者你不想改变。但是,根据定义,即使是当前范围之外的代码,volatile变量也可以随时更改。所以在我看来这两个限定词都相互矛盾。
答案 0 :(得分:3)
是的,有些情况下它是有意义的。总之,const volatile
意味着代码不能更改变量的值,但程序之外的东西可以。一些用例包括:
只读硬件寄存器
只读共享内存缓冲区,其中一个CPU写入,另一个只读取
这是一篇更详细的好文章:http://embeddedgurus.com/barr-code/2012/01/combining-cs-volatile-and-const-keywords/
答案 1 :(得分:0)
是的,有可能。
最好的例子是控制器中的状态寄存器,在程序中我们不应该修改此状态寄存器,因此它应该是一个常量。但这可以由处理器或硬件根据中断条件进行更改。因此,在程序中,我们要读取此状态寄存器的值时,应在不进行任何优化的情况下读取实际值。因此,状态寄存器也可以声明为易失性。 示例:
uint32_t volatile * const Spi_status_reg = (uint32_t *) 0x000800F0;
读取这样的声明的最好方法是从变量名回到左边: 这里的Spi_status_reg是指向易失性32位无符号整数的常量指针。