在循环处设断点,程序执行到后修改一下外部数据,使其满足跳出循环的条件,然后再执行,这样就可以继续调试下去。如果这种情况很多,可以通过在程序中增加条件编译语句方便调试。比如:
#define DEBUG //条件编译选择,可放在文件头部H文件之后。
。。。。。。。
#ifdef DEBUG
x=0; //调试时使用这条语句,执行下一句时就能跳出循环了
#endif
while(x==1); //假设这就是你所说的读取外部数据的语句,未读到数据则原地循环
调试完成后注掉#define DEBUG,也就是
//#define DEBUG
这样正式编译时x=0;这条语句就不会被编译进去了。以后调试时再恢复。
这只是个例子,相信你能理解这个含义从而加以应用。
在keil中使用stlink调试时,点击运行,程序始终跑不起来,可能的运行是:在上一次调试中,有程序运行错误,例如:数组访问越界,导致keil中的项目工程文件出现错误,所以跑不起来,可以新建工程解决该问题,问题主要出现在keil的工程文件上
这个你看英语就明白了:
警告:有一个没有调用的函数。
是告诉你,有一个函数,你定义了,却没有调用,这个函数的名字叫:Read_RO()
C51编译器是用于51单片机的,早在C51成立之初,51单片机的ROM是非常小的,只有几K,所以,为了节省ROM空间,C51编译器对于你定义了,但是没有调用的函数会提出警告,意思是提醒你节能减排,不要浪费ROM空间。
这个警告你可以忽略,如果你不想忽略,那么就调用那个函数或者屏蔽掉那个函数就行了。
成功汇编、连接后,按Ctrl+F5或者使用菜单Debug->Start/Stop Debug Session即可进入调试状态,这时工具栏会多出一个用于运行和调试的工具条。
调试手段:
单步执行(step或step over)
运行到当前光标处(Run to Cursor line)
设置断点(Insert/Remove Breakpoint),还可以开启或暂停光标所在行的断点功能
(Enable/Disable Breakpoint)
在使用Keil调试时,设置断点不会直接导致中断标志位无法置位。但是,设置断点可能会影响程序的实时运行,从而间接导致一些中断条件无法满足,使得中断标志位无法置位。
当你在Keil中设置断点,程序将在断点处停止运行。这种情况下,实时任务和硬件相关的处理将被暂停,导致时钟、定时器、外设等硬件可能无法正常工作。如果中断的产生依赖于这些硬件的实时运行,那么由于断点的设置,中断条件可能无法满足,从而使得中断标志位无法置位。
例如,如果你的程序依赖于一个定时器产生的中断,当你设置断点后,程序暂停运行,定时器可能也无法正常工作。因此,即使定时器到达预定的时间,由于程序暂停,定时器中断可能无法产生,从而导致中断标志位无法置位。
为了避免这种情况,你可以尝试以下方法:
1 在关键时序相关的代码处避免设置断点,以免影响实时任务的执行。
2 使用逻辑分析仪或示波器等硬件工具来观察中断信号,而不是使用软件断点。
3 使用模拟器进行仿真,以便在仿真环境中调试程序,而不会影响硬件的实时运行。
1、选择DEBUG进行硬件仿真
2、点击RUN按钮
3、在程序框的左边显示灰色的地方(注意:这个地方程序要运行到)然后点鼠标左键
一般程序运行起来后,断点调试基本是在可循环程序中,其他的也可以。
情况是正常的 因为你函数括号中定义的形参在函数内部没有得好使用,所以会d出这个warning。
不过程序是没有错的 因为你在c中嵌入汇编。而编译器是keil。keil会自动将函数中的参数传递给R7,这也就是 MOV A,R7这句话中为什么要使用R7的原因。
综上所述,这是一个欺骗了编译器的程序。表面上是没有使用函数参数,实际上确使用了^_^
以上就是关于在用KEIL调试程序时,遇到读取外部数据、死循环使得程序不能继续执行时怎么办全部的内容,包括:在用KEIL调试程序时,遇到读取外部数据、死循环使得程序不能继续执行时怎么办、keil中使用stlink调试stm32点击运行时程序没跑起来、Keil调试程序编译时显示 *** WARNING L16: UNCALLED SEGMENT,等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)