2.4 程序的编译与调试
上面在文件编辑窗口建立了文件“流水灯.c”,并且将文件添加到项目中,然后还需要编译和调试文件,发现并修改源程序中的语法错误和逻辑错误,最终目标是生成能够执行的.hex文件,具体步骤如下。
1. 程序编译
单击按钮,对当前文件进行编译,在图2-12所示的输出窗口会出现提示信息。
图2-12 文件编译信息
从输出窗口中的提示信息可以看到,程序中有2个错误,认真检查程序找到错误并改正,改正后再次单击按钮进行编译,直至提示信息显示没有错误为止,如图2-13所示。
图2-13 提示信息显示没有错误
2. 程序调试
程序编译没有错误后,就可以进行调试与仿真。单击开始/停止调试按钮(或在主界面单击Debug→Start/Stop Debug Session选项),进入程序调试状态,如图2-14所示。
图2-14 程序调试界面
图2-14左边的项目窗口给出了常用的寄存器R0~R7以及A、B、SP、DPTR、PC、PSW等特殊功能寄存器的值,这些值会随着程序的执行发生相应的变化。
在图2-14所示的存储器窗口的地址栏中输入0000H后回车,可以查看单片机片内程序存储器的内容,单元地址前有“C:”,表示程序存储器。要查看单片机片内数据存储器的内容,在存储器窗口的地址栏中输入D:00H后回车,可以看到数据存储器的内容。单元地址前有“D:”,表示数据存储器。
在图2-14中出现了一行新增加的用于调试的按钮,如图2-15所示。
图2-15 调试状态下新增加的按钮
还有几个原来就有的用于调试的按钮,如图2-16所示。
图2-16 用于调试的其他几个按钮
在程序调试状态下,可运用按钮以单步、跟踪、断点、全速运行等方式调试,也可观察单片机资源的状态,如程序存储器、数据存储器、特殊功能寄存器、变量寄存器及I/O端口的状态。这些图标大多数与Debug菜单中的各项子命令一一对应,只是快捷按钮要比菜单使用起来更加方便快捷。
图2-15与图2-16中常用的快捷按钮的功能如下。
(1)各调试窗口显示的开关按钮
下面的图标控制图2-14中各个窗口的开与关。
:项目窗口的开与关。
:特殊功能寄存器显示窗口的开与关。
:输出窗口的开与关。
:存储器窗口的开与关。
:变量寄存器窗口的开与关。
(2)各调试功能的按钮
:调试状态的进入/退出。
:复位CPU。在程序不改变的情况下,若想使程序重新开始运行,单击该按钮即可。执行此命令后,程序指针返回0000H地址单元。另外,一些内部特殊功能寄存器在复位期间也将重新赋值。例如,A将变为00H,SP变为07H,DPTR变为0000H,P3~P0口变为FFH。
:全速运行。单击该按钮,可全速运行程序。当然若程序中已经设置断点,程序将执行到断点处,并等待调试指令。在全速运行期间,不允许查看任何资源,也不接受其他命令。
:单步跟踪。可以单步跟踪程序。每执行一次此命令,程序将运行一条指令。当前的指令用黄色箭头标出,每执行一步箭头都会移动,已执行过的语句呈绿色。
:单步运行。本命令实现单步运行程序,此时单步运行命令将把函数和函数调用当作一个实体来看待,因此单步运行是以语句(该语句不管是单一命令行,还是函数调用)为基本执行单元。
:执行返回。在用单步跟踪命令跟踪到子函数或子程序内部时,使用该按钮,即可将程序的PC指针返回调用此子程序或函数的下一条语句。
:运行到光标行。
:停止程序运行。
在程序调试中,上述几种运行方式都要用到,灵活运用这些手段,可大大提高查找差错的效率。
(3)断点操作的按钮
在程序调试中常常要设置断点,一旦执行到该程序行即停止,可在断点处观察有关变量值,以确定问题所在。图2-16中有关断点操作的按钮的功能如下。
:插入/清除断点。
:清除所有的断点设置。
:使能/禁止断点,用于开启或暂停光标所在行的断点。
:禁止所有断点。
此外,插入或清除断点最简单的方法,是把鼠标指针移至需要插入或清除断点的行首双击即可。
上述的4个按钮,也可Debug菜单中找到。