keil调试问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了keil调试问题相关的知识,希望对你有一定的参考价值。

大家好, 最近我在调试Keil软件时出现一个问题:源程序如下--调试时,我用单步调(F11),发现开始时箭头会跳过P1=aa,(指针指向for语句,再按一下F11跳转至delayms(200)处,对应的P1口也缺少这一步信息。谢谢大家帮忙。
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
void delayms(uint);
void main()

uint aa,i,j;
while(1)

aa=0xaa;
for(i=0;i<5;i++)

P1=aa;
delayms(200);
P1=0xff;
aa=_crol_(aa,1);

for(j=0;j<3;j++)

aa=0xfe;
for(i=0;i<7;i++)

P1=aa;
delayms(200);
aa=_crol_(aa,1);

for(i=0;i<7;i++)

P1=aa;
delayms(200);
aa=_cror_(aa,1);




void delayms(uint ms)

uint i,j;
for(i=ms;i>0;i--)
for(j=110;j>0;j--);

二楼说的情况可能是有,但有时候又不会出现我上述的那种情况,就是单步执行时P1=aa;会执行,怪事了。

应该是编译器优化的结果.
因为在三个循环中
P1=aa;
delayms(200);
aa=_crol_(aa,1);
基本一致.从仿真时的反汇编程序看,他们的入口一样,就好像同样调用一个函数.这样可以缩短代码的长度.
参考技术A 好久不弄51了,不知道给端口赋值是p1=aa,还是str p1 = aa 了

keil调试问题记录

1、错误类型:L6218E:Underfined symbol &&&&&&&&& (referred form &&&&&.o).

现象说明:明明已经定义了&&&&&&&&&函数,也有&&&&&&&&&函数的实现,也包含头文件了,可就是在连接时提error,goto define 跳转不过去。

解决:总之是函数实现部分的代码没有包含,从这方面找原因:宏定义开关未打开、实现的代码中有未实例化的部分、头文件与宏开关的顺序,等等。

2、进入不可屏蔽中断NMI,查找定位从哪句代码导致的。

让程序进入不可屏蔽中断NMI,打开寄存器窗口,找到下图中SP的内容,此为程序地址;

复制此地址到memory窗口中,然后把内存中的数据以无符号int显示:

找到第7个位置的内存单元,把该地址内容记下来,然后在disassembly窗口中查找到该地址的位置,对应的代码就是导致进入不可屏蔽中断NMI的地方。

3、

以上是关于keil调试问题的主要内容,如果未能解决你的问题,请参考以下文章

keil调试中的问题。

keil mdk 调试的时候没有黄色箭头

keil调试程序下面的窗口叉掉不见了咋两个放在一起

记录一次keil vscode 联合调试阅读代码过程中出现乱码,导致keil编译不过的问题

如何在keil调试中黄色箭头不出现汇编窗口而是停在main主函数上

keil调试问题记录