debug的工程下面默认的优化选项是low,当我调试完成之后我用release编译之后发现优化选项是high,造成执行的结果不正确。后来在debug中加入优化选项,发现编译器把一部分代码优化掉了
我的代码如下:
commandcount = 0;
while( Command[ COMMAND_AREA_SIZE - 1 ] != COMMAND_FIN_CODE )
{
if(commandcount > COMMANDTimOUT )
{
restore = ON;
RestoreCommand( );
break;
}
}
if(restore == OFF )
StoreCommand( );
Command是在通信中断中改变的,在主程序中判断,commandcount 是超时计数,如果超时就退出,没有优化的时候是正常执行。
如果优化过后,变成把Command[ COMMAND_AREA_SIZE - 1 ]的值付给R0,一直在对R0做比较,结果程序进入死循环。
优化的选项是
Common subexpression elimination 和 Code motion
问下版主怎么避免这种现象,就是说这种共有变量的情况怎么可以不优化。我的意思就是说,在选中优化选项的同时,怎么避免这种执行结果不对的情况 |