ZHDA315 September   2026 MSPM0C1103 , MSPM0C1103-Q1 , MSPM0C1104 , MSPM0C1104-Q1

 

  1.   1
  2.   摘要
  3.   商标
  4. 1简介
  5. 2C 编译器优化
    1. 2.1 优化设置
      1. 2.1.1 优化级别
      2. 2.1.2 Optnone
      3. 2.1.3 链接时优化 - LTO
    2. 2.2 运行时模型选项
      1. 2.2.1 数据段与函数段
      2. 2.2.2 函数外提
  6. 3编码技巧
    1. 3.1 为变量和常量选用尽可能小的类型
    2. 3.2 避免乘法和除法
    3. 3.3 使用查找表代替手动计算
    4. 3.4 高效使用函数
    5. 3.5 实现递减计数循环
    6. 3.6 使用 __even_in_range() 内建函数
    7. 3.7 volatile 关键字
  7. 4示例
    1. 4.1 优化级别
    2. 4.2 LTO
    3. 4.3 运行时模型选项
  8. 5总结
  9. 6参考资料

volatile 关键字

volatile 关键字是 C 标准的一部分。tiarmclang 编译器在所有语言模式下均支持该关键字。

volatile 关键字指示编译器如何访问变量,这要求编译器不得投机取巧地优化涉及该变量的表达式。例如,外部程序、中断、另一个线程或外围设备也可访问该变量。

编译器会使用数据流分析来确定访问是否合法,从而尽可能消除冗余的存储器访问。不过,一些存储器访问可能在编译器未看到的方面比较特殊,在这类情况下,您应当使用 volatile 关键字来防止编译器优化掉某些重要内容。对于已声明为 volatile 的变量,编译器不会优化掉对该变量的任何访问。volatile 读取和写入的次数与 C/C++ 代码中的完全相同,不多不少而且顺序也完全相同。

任何可能由明显程序控制流程外部的事物(例如中断服务例程)进行修改的变量必须声明为 volatile。这会告知编译器,中断函数可能随时修改该变量的值,因此编译器不能执行会改变该变量访问次数或访问顺序的优化。这就是 volatile 关键字的主要用途。