在Windows中使用dScope的调试功能
dScope是一种基于Windows的多窗口软件仿真器,它可以在完全没有8051硬件的情况下模拟调试各种应用程序,即使对单片机内部特殊集成功能的编程,也可以找到对应的模拟窗口。dScope除了用命令行的方式进行调试以外,还可将各种调试命令汇集于一个调试文件中,然后调用该文件,就可达到自动测试用户源代码的目的。但是调试必须是在源文件编辑、编译无误之后才得以进行的,主要是反复修改程序并检验编写的程序是否能够可靠地实现预期目标的过程。在做开发计划时,通常就把开发和调试周期同等对待。
程序调试时,必须明确两个重要的概念,即单步执行与全速运行。全速运行是指一程序行执行完以后紧接着执行下一程序行,中间不停止,这样可以看到该段程序执行的总体效果,即最终结果正确还是错误,但如果程序错误,则难以确认错误出现的位置。单步执行是每次执行一行程序,执行完该行程序即停止,等待命令执行下_行程序,此时可以观察该程序行执行完以后得到的结果,是否与我们写该程序行所想要得到的结果相同,借此可以找到程序中的问题所在。程序调试中,这两种运行方式都要用到。
使用菜单“Step”或相应的快捷按钮或使用快捷键Fll,可以单步执行程序使用菜单“StepOver”或相应的快捷按钮或使用快捷键Fl0,可以以过程单步形式执行命令。所谓过程单步,是指将汇编语言中的子程序或高级语言中的函数作为一个语句来全速执行。
通过单步执行程序,可以找出一些问题的所在,但是仅依靠单步执行来查错有时是困难的,或虽能查出错误但效率很低,为此必须辅以其他方法。比如在循环次数很多的循环子程序中,单步执行方法就不再合适,这时候可以使用“单步执行到函数外”命令”,或者“运行到光标所在行”命令)来跳出循环子程序。还有个办法就是在单步执行到循环子程序的时候,不再使用单步命令Fll而采用过程单步Fl0命令,这样就不会进入循环子程序内部。灵活使用这几种方法,可以大大提高调试的效率。
在进入KeilμVision2的调试环境以后,如果发现程序有错,可以直接对源程序进行修改,但是要实现重新编译,必须先退出调试环境,然后重新编译、连接后再次进入调试。如果只是需要对某些程序进行作测试,或仅需要对源程序进行临时的修改,这样的过程未免有些麻烦,可以采用KeiluⅥsion2软件提供的在线汇编的方法。将光标定位于需要修改的程序行上,选择菜单“Debug/lnlineAssembly”,会弹出如下图示的对话框,在“EnterNewInstruction”后面的编辑框内直接输入需更改的程序语句,输入完成以后回车将自动指向下一条语句,可以继续修改,如果不再需要修改,可以单击右上角的关闭按钮关闭窗口。
程序调试时,一些程序行必须满足一定的条件才能被执行(如程序中某变量达到一定的值、按键被按下、串口接收到数据、有中断产生等),这些条件往往是异步发生或难以预先设定的,这类问题使用单步执行的方法是很难调试的,这时就需要使用到程序调试中的另一种非常重要的方法——断点设置。
断点设置的方法有很多种,常用的是在某一程序行设置断点,设置好断点后可以全速运行程序,一旦执行到该程序行即停止,可在此观察有关变量值,以确定问题所在。在程序行设置/删除断点的方法是将光标定位于需要设置断点的程序运行,使用菜单“Debug/lnsert/RemoveBreakpoint”设置或删除断点(也可以用在该行双击实现同 样的功能)。其他几个选项的意义为:“Debug/Enable/DbleBreakpoint”是指开启或暂停光标所在行的断点功能,“Debug/DisableAllBreakpoint”暂停所有的断点,“Debug/KillAllBreakpoint”清除所有的断点设置。