给大家看一下下边这段代码
while(1)
{
if(rst_flag)
{
rst_flag = 0;
uart_send("HERE'S NO BUG");
break;
}
}
rst_flag全局变量,初始化为0,外部一定条件下修改为1,程序上来理论上要一直等待rst_flag为1然后打印Here’s no bug。
但是程序实际执行时候,并没有一直等待rst_flag为1,二是执行了一次if条件之后,直接重新循环,而且再也没有判断if条件是否成立,而是直接进入while(1);死循环。
问题原因:
编译器优化之后发现初始if条件为假,则直接进行死循环。
解决办法:
取消编译器优化