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 vscode 联合调试阅读代码过程中出现乱码,导致keil编译不过的问题