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

[复制链接]
 楼主| 东北小辉辉 发表于 2012-12-7 16:10 | 显示全部楼层 |阅读模式
RT 最近在搞18b20的程序 深深的知道延时的重要性 但是调试观察时间的时候却发现了这种情况 如图

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


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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
2389676302 发表于 2012-12-7 16:20 | 显示全部楼层
这个问题还有待研究
ayb_ice 发表于 2012-12-7 16:39 | 显示全部楼层
语句被合并执行了,成了公共部分

这样要求严格的延时还是用汇编可靠些
zf_015820 发表于 2012-12-7 17:05 | 显示全部楼层
有道理,这种严格延时,最好在KEIL内嵌汇 编
 楼主| 东北小辉辉 发表于 2012-12-7 17:13 | 显示全部楼层
ayb_ice 发表于 2012-12-7 16:39
语句被合并执行了,成了公共部分

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

合并执行?公共部分?求详细,我原来从来没遇到过这种情况,是否是当相同语句过多时编译器判断程序过于冗余,然后默认不执行语句呢?还有图3中dq=1前面也无法设置断点,怎么解释呢?谢谢您的回答:)
uet_cache 发表于 2012-12-8 12:15 | 显示全部楼层
多加几个行,隔开此断点行,再看能不能设。理应是可以的。
chenbb8 发表于 2012-12-8 12:22 | 显示全部楼层
3L的意思是编译器不会一行行的翻译你的程序。不会做到每一句都可以设置断点,
如果有A B C三句被编译器糅合成了一个代表A B C功能的汇编块,那么A语句究竟指向汇编块的哪个部分呢?
既然无法判断,就无法设置断点。
在需要观察的位置上插入一个nop指令,可以在nop指令上设置断点,这种做法偶尔无效~
翻译成什么样子,自己看反汇编去
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

91

帖子

0

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