ZHCU876Z July 2001 – October 2023 SM320F28335-EP
编译器分析数据流以尽可能地避免访问内存。如果代码完全依赖于C/C++ 代码中编写的内存访问,则必须使用易失性关键字来标识这些访问。编译器不会优化任何对易失性变量的引用。
在以下示例中,循环等待一个位置被读取为0xFF:
unsigned int *ctrl;
while (*ctrl !=0xFF);
在此示例中,*ctrl 是循环不变表达式,因此该循环会优化为单个内存读取。要更正此问题,请将 ctrl 声明为:
volatile unsigned int *ctrl;