zfz0122 发表于 2015-3-14 08:51
是什么原因啊
原因就是定义变量的时候定义了u32,这种变量应该要加volatile类型。
安 发表于 2015-3-14 11:07
这不是软件问题,是设计人员程序书写的问题。
软件优化问题,要把tim定义成volatile的类型
左岸右岸 发表于 2015-3-15 14:07
怎么我也觉得就该无限循环?跟大家的水平差距这么大么
tim【0】会在定时器中断中被过1毫秒被加1,按逻辑是在tim被清零,然后进入循环,然后就等待tim [ 0 ]被加到1000时会跳出循环,结果在循环中tim[ 0 ]并没有被累加。
如果被优化,说明该变量没有使用。或者定义成了局部变量。
应该是被优化掉了
tim[ 0 ]=0;
while(tim[ 0 ] < 1000);
可能被优化成while(0 < 1000); (要看实际编译后程序)所以就无限循环
用volatile强制去读tim[ 0 ] 试试应该可以解决
这种问题不该怀疑硬件,是不了解volatile
volatile确实是解决这个问题的其中一个方法之一,还有一个方法是在循环里面加上一小段代码
wsnfly~ 发表于 2015-3-16 16:43
volatile确实是解决这个问题的其中一个方法之一,还有一个方法是在循环里面加上一小段代码 ...
为什么要加上一小段代码就可以了呢?
moyanming2013 发表于 2015-3-16 18:07
为什么要加上一小段代码就可以了呢?
可能是编译器优化的吧,我也不是很清楚。
加上volatile是标准的解决方法
:D:D:D:D:D:D