打印

发现一个keil2编译器调试很奇怪的问题?

[复制链接]
1271|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
RT 最近在搞18b20的程序 深深的知道延时的重要性 但是调试观察时间的时候却发现了这种情况 如图

为什么这条语句dq=1前面不能设置断点呢?前面不能设置断点是否说明该语句未被编译呢?
还有这个图


delay1();是一个延时4us的函数,但是调试的时候只走了1us,说明中间的延时函数都没起作用
在网上查资料没什么结果,大家给看看,谢谢了

秒数2.png (8.76 KB )

秒数2.png

秒数1.png (9.25 KB )

秒数1.png

断点.png (3.7 KB )

断点.png

相关帖子

沙发
2389676302| | 2012-12-7 16:20 | 只看该作者
这个问题还有待研究

使用特权

评论回复
板凳
ayb_ice| | 2012-12-7 16:39 | 只看该作者
语句被合并执行了,成了公共部分

这样要求严格的延时还是用汇编可靠些

使用特权

评论回复
地板
zf_015820| | 2012-12-7 17:05 | 只看该作者
有道理,这种严格延时,最好在KEIL内嵌汇 编

使用特权

评论回复
5
东北小辉辉|  楼主 | 2012-12-7 17:13 | 只看该作者
ayb_ice 发表于 2012-12-7 16:39
语句被合并执行了,成了公共部分

这样要求严格的延时还是用汇编可靠些

合并执行?公共部分?求详细,我原来从来没遇到过这种情况,是否是当相同语句过多时编译器判断程序过于冗余,然后默认不执行语句呢?还有图3中dq=1前面也无法设置断点,怎么解释呢?谢谢您的回答:)

使用特权

评论回复
6
uet_cache| | 2012-12-8 12:15 | 只看该作者
多加几个行,隔开此断点行,再看能不能设。理应是可以的。

使用特权

评论回复
7
chenbb8| | 2012-12-8 12:22 | 只看该作者
3L的意思是编译器不会一行行的翻译你的程序。不会做到每一句都可以设置断点,
如果有A B C三句被编译器糅合成了一个代表A B C功能的汇编块,那么A语句究竟指向汇编块的哪个部分呢?
既然无法判断,就无法设置断点。
在需要观察的位置上插入一个nop指令,可以在nop指令上设置断点,这种做法偶尔无效~
翻译成什么样子,自己看反汇编去

使用特权

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

本版积分规则

13

主题

91

帖子

0

粉丝