您好,欢迎访问三七文档
Keil的调试命令以前我们学习了如何建立工程、写C源文件、连接工程,并获得目标代码,但是做到这一步仅仅代表你的源程序没有语法错误,至于源程序中存在着的其它错误,必须通过调试才能发现并解决。事实上,除了极简单的程序以外,绝大部份的程序都要通过反复调试才能得到正确的结果,因此,调试是软件开发中重要的一个环节。调试的重要性常用调试命令常用窗口输出窗口观察窗口反汇编窗口结合实例主要内容在对工程成功地进行汇编、连接以后,按Ctrl+F5或者使用菜单Debug-Start/StopDebugSession即可进入调试状态,Keil内建了一个仿真CPU用来模拟执行程序,该仿真CPU功能强大,可以在没有硬件和仿真机的情况下进行程序的调试常用调试命令进入调试状态后,界面与编缉状态相比有明显的变化,Debug菜单项中原来不能用的命令现在已可以使用了,工具栏会多出一个用于运行和调试的工具条,如图1所示,Debug菜单上的大部份命令可以在此找到对应的快捷按钮,从左到右依次是复位、运行、暂停、单步、过程单步、执行完当前子程序、运行到当前行、下一状态、打开跟踪、观察跟踪、反汇编窗口、观察窗口、代码作用范围分析、1#串行窗口、内存窗口、性能分析、工具按钮等命令。学习程序调试,必须明确两个重要的概念:单步执行与全速运行。全速执行是指一行程序执行完以后紧接着执行下一行程序,中间不停止,这样程序执行的速度很快,并可以看到该段程序执行的总体效果,即最终结果正确还是错误,但如果程序有错,则难以确认错误出现在哪些程序行。单步执行是每次执行一行程序,执行完该行程序以后即停止,等待命令执行下一行程序,此时可以观察该行程序执行完以后得到的结果,是否与我们写该行程序所想要得到的结果相同,借此可以找到程序中问题所在。程序调试中,这两种运行方式都要用到。使用菜单STEP或相应的命令按钮或使用快捷键F11可以单步执行程序,使用菜单STEPOVER或功能键F10可以以过程单步形式执行命令,所谓过程单步,是指将汇编语言中的子程序或高级语言中的函数作为一个语句来全速执行。观察窗口是很重要的一个窗口,工程窗口中仅可以观察到工作寄存器和有限的寄存器如A、B、DPTR等,如果需要观察其它的寄存器的值或者在高级语言编程时需要直接观察变量,就要借助于观察窗口了。观察窗口#includereg51.hsbitP1_0=P1^0;voidmDelay(unsignedcharDelayTime){unsignedintj=0;for(;DelayTime0;DelayTime--){for(j=0;j125;j++){;}}}voidmain(){unsignedinti;for(;;){mDelay(10);i++;if(i==10){P1_0=!P1_0;i=0;}}}编译、连接后按Ctrl+F5进入调试,按F10单步执行。注意观察窗口,其中有一个标签页为Locals,这一页会自动显示当前模块中的变量名及变量值。可以看到窗口中有名为I的变量,其值随着执行的次数而逐渐加大,如果在执行到mDelay(10)行时按F11跟踪到mDelay函数内部,该窗口的变量自动变为DelayTime和j。另外两个标签页Watch#1和Watch#2可以加入自定义的观察变量,点击“typeF2toedit”然后再按F2即可输入变量,试着在Watch#1中输入I,观察它的变化。观察窗口观察窗口中变量的值不仅可以观察,还可以修改,以该程序为例,I须加10次才能到10,为快速验证是否可以正确执行到P1_0=!P1_0行,点击I后面的值,再按F2,该值即可修改,将I的值改到9,再次按F10单步执行,即可以很快执行到P1_0=!P1_0程序行。该窗口显示的变量值可以以十进制或十六进制形式显示,方法是在显示窗口点右键,在快捷菜单中选择如图5所示。点击View-DissamblyWindow可以打开反汇编窗口,该窗口可以显示反汇编后的代码、源程序和相应反汇编代码的混合代码,可以在该窗口进行在线汇编、利用该窗口跟踪已找行的代码、在该窗口按汇编代码的方式单步执行,这也是一个重要的窗口。打开反汇编窗口,点击鼠标右键,出现快捷菜单,如图6所示,其中MixedMode是以混合方式显示,AssemblyMode是以反汇编码方式显示。程序调试中常使用设置断点然后全速运行的方式,在断点处可以获得各变量值,但却无法知道程序到达断点以前究竟执行了哪些代码,而这往往是需要了解的,为此,Keil提供了跟踪功能,在运行程序之前打开调试工具条上的允许跟踪代码开关,然后全速运行程序,当程序停止运行后,点击查看跟踪代码按钮,自动切换到反汇编窗口,如图6所示,其中前面标有“-”号的行就是中断以前执行的代码,可以按窗口边的上卷按钮向上翻查看代码执行记录。利用工程窗口可以观察程序执行的时间,下面我们观察一下该例中延时程序的延时时间是否满足我们的要求,即是否确实延时10毫秒,展开工程窗口Regs页中的Sys目录树,其中的Sec项记录了从程序开始执行到当前程序流逝的秒数。点击RST按钮以复位程序,Sec的值回零,按下F10键,程序窗口中的黄色箭头指向mDelay(10)行,此时,记录下Sec值为0.00038900,然后再按F10执行完该段程序,再次查看Sec的值为0.01051200,两者相减大约是0.01秒,所以延时时间大致是正确的。读者可以试着将延时程序中的unsignedint改为unsignedchar试试看时间是否仍正确。注意,使用这一功能的前提是在项目设置中正确设置晶振的数值。
本文标题:keil单步调试
链接地址:https://www.777doc.com/doc-4893349 .html