救命啊~while(n--)不能跳出循环

[复制链接]
5848|24
jerry_hust 发表于 2011-4-21 10:00 | 显示全部楼层
函数参数前加个volatile,这个n可能在其他地方会变化,才导致循环退不出来,加这个关键字就可以解决
sdpz 发表于 2011-4-21 10:04 | 显示全部楼层
敢问楼主,你是不是中断里调用delay_ns,主程序里又调用了?
 楼主| rezire199847 发表于 2011-4-27 17:01 | 显示全部楼层
根本没问题,main( )一启动运行,立即跳出来到0x081D 了。C:0x0809    020817   LJMP     main(C:0817)
     9: void delay_ns(unsigned int n)
    10: {
    11: while(n--);
C:0x080C    EF       MOV      A, ...
刘前辈 发表于 2011-4-17 20:17

你这个不好说,我升级一下keil后,就可以了,这个根本就是编译上的bug
lizardno1 发表于 2011-5-2 02:12 | 显示全部楼层
23# rezire199847
这根本就不是编译器的bug,这只是编译器对你程序的"优化"结果。当然某些优化可能和你的本意并不相符,比如说楼主你给出的例子。但是我们还是应当尽量改善自己的语言规范性,因为有时候我们不知道自己用的编译器究竟对程序做了怎样的"优化“~
playjian 发表于 2011-5-2 14:43 | 显示全部楼层
试一试把优化级别降低到最低~~不优化代码试一试~~说不定keil自己进行了某些调整了~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部