标题: keil和Proteus联调程序乱跳 [打印本页]

作者: 子示    时间: 2021-10-12 11:44
标题: keil和Proteus联调程序乱跳
Keil和Proteus联调51程序时,遇到了好几个问题:第一,每点一次Keil里的单步,Keil和Proteus里就会自动跳过好多行代码,无论是C51还是汇编,都有这个问题,尝试过把代码优化设置为0级(不优化),依旧没用,还完全不理会我设置的断点,尝试过卸载重装,还换了Keil4也没用。反汇编的内容是正确的,代码运行效果是对的,只是不能单步,Keil里的一个单步会随机跳过某几行,但是这些行并不对应C程序,这就导致程序执行的每一句顺序都是对的,只是没有办法一行一行运行或者设置断点停在该停的地方,整体看上去就像是乱跑一样,一会往上,一会往下。
第二,keil的变量监视中所有值都是零,但是对这些变量实际值是有的,只是没显示出来,也不知道为什么。
第三,Keil对C51的编译结果的最后一行都是NOP,尽管这样,代码走到这一行的时候,在Proteus里显示的是原本该正常显示的正确的汇编指令。
第四,keil有时候就跟抽风了一样,上次还能正常显示反汇编指令,下一次调试就全部编程NOP,但是Proteus里显示的还是正确的汇编指令,运行结果都对,这一点还在汇编窗口向下滚动时体现出来,当我往下滚动汇编窗口的指令的时候,尽管已经到了代码区结尾的NOP指令,Proteus竟然接受到keil发出的继续下一步的指令,然后就是Keil这边完全不知道跑到了哪,但是Proteus里按原来的顺序指令继续正常执行。
整体看来就仿佛keil表面一套,背里一套,表面的乱七八糟,背里的很正常,求教各位大佬帮忙验证和解释一下该怎么办才能解决这些问题。


scp_2021-10-12_11-23.png (79.08 KB, 下载次数: 63)

scp_2021-10-12_11-23.png

scp_2021-10-12_11-231.png (17.99 KB, 下载次数: 58)

scp_2021-10-12_11-231.png

LED.zip

27.43 KB, 下载次数: 6


作者: taotie    时间: 2021-10-12 18:36
直接在Proteus中调试
作者: 郑汉松    时间: 2021-10-13 09:06
建议直接在proteus写代码,然后在proteus里面调试代码哦
作者: lovezjf234    时间: 2021-10-13 09:24
追根刨底是好事,但是你要的结果是什么,如果只是看运行的状态,没必要搞那么细,最后什么结果都没有得到。即使是和实物联调,你会发现和proteus一样的现象.这是keil内部C语言反编译的结果。所以个人认为还是专注看重点
作者: 子示    时间: 2021-10-13 16:09
单步和查看变量是调试的重要手段,对于小实验也许只看看结果就行,但是碰到稍微复杂一点的程序,少了这两样几乎就等于IDE报废了,感觉还是搞清楚哪里有问题比较好,即使这些问题解决不了
作者: Charlie_Blue    时间: 2021-10-19 23:21
我也在今天尝试联调时遇上了同样的问题,看来单步执行只在proteus里才能正常工作,两个一起就不行了
作者: 啤酒瓶子老大    时间: 2021-10-20 03:28
建议还是用可以仿真的芯片直接调试硬件吧。就算把proteus调好了,到实际做硬件的时候又会有问题。个人感觉proteus就是浪费时间。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1