const指定此变量不能在我们的程序代码中更改,但我们不能保证此值会由于硬件原因而更改。volatile关键字表示编译器执行强制i/o寻址,而不是读取寄存器的值。一般来说,对于连续变量,编译器将首先读取数据并将其保存到寄存器中。使用时直接读取寄存器中的数据,加快了处理速度。但是,有时,如实时读取键值或其他需要实时读取的数据,它不能使用寄存器,而必须使用易失性开关,否则关键字就不见了。所以有时const和volatile可以一起使用。
我的理解是:
const由编译器优化并成为常量。
volatile的功能是告诉编译器不要优化变量(不要直接使用cpu缓存值,而是直接使用内存值)
constvolatile是告诉编译器变量没有优化(它没有优化为常量或变量,这是从内存中获取的)
volatile修饰符告诉编译器变量的值可以用程序未显式指定的任何方式更改。最常见的例子是外部端口的值,在程序中不需要任何赋值语句就可以更改它。这种变量你可以用volatile修改它,complier不会优化它。const修改的变量不能在程序内部修改,但可以在程序外部修改,就像上面提到的外部端口的值一样。如果您只使用const,编译器可能会优化这些变量,volatile将是安全的。
你好,我是天上的星星。我很高兴为你回答。当然。例如,只读状态寄存器。const指定变量不能在我们的程序代码中更改,但是我们不能保证值会由于硬件原因在代码之外更改。volatile意味着我们的代码将同时更新并使用最新的值。比较专业的理科知识,欢迎关注我。如果你喜欢我的回答,也请给我表扬或转发,你的鼓励是支持我写下来的动力,谢谢。