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参考资料

使用 __even_in_range() 内建函数

__even_in_range(x,NUM) 内建函数为编译器提供了一条关于 switch 语句的提示:值 x 始终是 0 到 NUM(含)范围内的偶数值。这使得编译器能够对 x 的取值作出更多假设,从而进行比通常情况下更深入的优化。该内建函数通常用于中断服务程序 (ISR),因为中断向量始终具有固定的取值范围,且始终为偶数值。

然而,__even_in_range() 并不限于 ISR 使用。只要代码能够保证 switch 的控制变量始终为偶数且其取值有上限,该内建函数也可用于代码中的其他 switch 语句。一个例子是某个字节计数器变量,它每次递增 2 而非 1,并且其最大值由代码控制,使其回绕至 0 或 2。