发新帖我要提问
12
返回列表
打印

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

[复制链接]
楼主: rezire199847
手机看帖
扫描二维码
随时随地手机跟帖
21
jerry_hust| | 2011-4-21 10:00 | 只看该作者 回帖奖励 |倒序浏览
函数参数前加个volatile,这个n可能在其他地方会变化,才导致循环退不出来,加这个关键字就可以解决

使用特权

评论回复
22
sdpz| | 2011-4-21 10:04 | 只看该作者
敢问楼主,你是不是中断里调用delay_ns,主程序里又调用了?

使用特权

评论回复
23
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

使用特权

评论回复
24
lizardno1| | 2011-5-2 02:12 | 只看该作者
23# rezire199847
这根本就不是编译器的bug,这只是编译器对你程序的"优化"结果。当然某些优化可能和你的本意并不相符,比如说楼主你给出的例子。但是我们还是应当尽量改善自己的语言规范性,因为有时候我们不知道自己用的编译器究竟对程序做了怎样的"优化“~

使用特权

评论回复
25
playjian| | 2011-5-2 14:43 | 只看该作者
试一试把优化级别降低到最低~~不优化代码试一试~~说不定keil自己进行了某些调整了~

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则