【问题现象】
编译平台CCS12.6,编译器22.6.0,开2级优化,有一个中断变量 IsrVar.A,在中断内进行计时供主循环使用,在执行一下代码时卡死。本意是想通过中断延时一段时间的,后面测试时发现卡在了死循环里。
IsrVar.A = 0;
while (IsrVar.A > 100) {
赋值语句1;}
赋值语句2;
【原因分析】
查看汇编代码发现while循环的判断表达被固定成使用0了,从这个现象来看原因是中断变量未指明外部属性,编译器优化时根据上下文可以确定IsrVar.A的值,不会重新读取以提高执行效率。
查看编译器优化说明文档《TMS320C28x Optimizing C_C++ Compiler_v22.6.0.LTS.pdf》,在3.16.8这一节有说影响循环次的变量的表达式会被优化成更高效的,我认为这就是对此现象的官方解释,请问我的理解是否正确?