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