ZHDA315 September 2026 MSPM0C1103 , MSPM0C1103-Q1 , MSPM0C1104 , MSPM0C1104-Q1
volatile 关键字是 C 标准的一部分。tiarmclang 编译器在所有语言模式下均支持该关键字。
volatile 关键字指示编译器如何访问变量,这要求编译器不得投机取巧地优化涉及该变量的表达式。例如,外部程序、中断、另一个线程或外围设备也可访问该变量。
编译器会使用数据流分析来确定访问是否合法,从而尽可能消除冗余的存储器访问。不过,一些存储器访问可能在编译器未看到的方面比较特殊,在这类情况下,您应当使用 volatile 关键字来防止编译器优化掉某些重要内容。对于已声明为 volatile 的变量,编译器不会优化掉对该变量的任何访问。volatile 读取和写入的次数与 C/C++ 代码中的完全相同,不多不少而且顺序也完全相同。
任何可能由明显程序控制流程外部的事物(例如中断服务例程)进行修改的变量必须声明为 volatile。这会告知编译器,中断函数可能随时修改该变量的值,因此编译器不能执行会改变该变量访问次数或访问顺序的优化。这就是 volatile 关键字的主要用途。