1.将CVAVR中的源程序导入到AVR Studio
在CVAVR中将源程序编译好后,若想将源程序导入到AVR Studio中,需要按下述步骤进行相关操作。
【步骤1】 在CVAVR IDE中,执行菜单命令“Tools”→“Debugger”,或者单击工具栏上的图标 ,将出现图2-9所示的对话框。在图2-9所示的对话框中,若单击“New Project”按钮,将创建Atmel AVR Assembler(汇编语言)或AVR GCC(C/C++语言)项目。单击“Open”按钮,可打开已存在的项目。
图2-9 欢迎对话框
【步骤2】 在图2-9所示对话框中单击“Open”按钮,弹出“Open Project or Object File”对话框,在“查找范围”栏中找到在CVAVR中已创建并需要打开的项目,如图2-10所示。
图2-10 打开在CVAVR中已创建的项目
AVR Studio是Atmel AVR系列的软件仿真器,它由Atmel公司开发并免费提供给用户,用户可以在Atmel公司的官方网络(http://www.atmel.com)上自由下载。以本节CVAVR中已经创建的“新建项目”为例,讲述源程序在AVR Studio中的调试与仿真等内容。
【步骤3】 找到项目后,单击“打开”按钮,弹出“Save AVR Studio Project File”对话框,询问用户在AVR Studio中保存项目的名称。用户可以更改项目名,也可直接单击“保存”按钮以使用默认的项目名。
图2-11 调试平台和器件选择对话框
【步骤4】 在“Save AVR Studio Project File”对话框中单击“保存”按钮,弹出图2-11所示的“Welcome to AVR Studio 4”对话框。在此对话框中选择“AVR Simulator”和“ATmega16”。这一步主要是为调试程序用的,也可以暂时不选,等到调度程序时,通过“Debug”菜单下的“AVR Simulator Options”命令来选择。选择完毕后,单击“Finish”按钮,将进入AVR Studio集成工作环境界面,如图2-12所示。
图2-12 AVR Studio集成工作环境界面
2.AVR Studio仿真参数设置
在进行仿真前,还需要进行相关参数的设置,如更改AVR单片机型号、更改单片机的晶振频率等。在AVR Studio中执行菜单命令“Debug”→“AVR Simulator Options”,弹出“Simulator Options”对话框,如图2-13所示。“Simulator Options”对话框中有两个选项卡,即“Device selection”和“Stimuli and logging”。
图2-13 “Simulator Options”对话框(“Device selection”选项卡)
【“Device selection”选项卡】 如图2-13所示,在“Device”栏中选择所需的单片机型号(在此选择“ATmega16”);在“Frequency”栏中选择AVR单片机使用的晶振频率(在此选择8MHz);在“Boot loader”区域中可引导加载程序的设置,选中“Enable Boot reset”复选框时表示允许启动复位,在其下拉列表中可选择启动复位地址。
【Stimuli and logging选项卡】 如图2-14所示,在此可设置外部激励或记录端口的相关信息。在“Port”中选择外部激励端口或记录端口;在“Function”栏中选择外部激励端口(Stimuli)或选择记录端口(Logging)。
设置为外部激励(Stimuli)时,该端口必须为输入状态时有效,且还需指出激励文件位置,即在“File”栏中打开激励文件。激励文件中的值将在指定的周期被放在指定端口的PIN寄存器中,激励文件的格式与端口记录格式相同。
设置为记录端口(Logging)时,该端口必须为输出状态时有效,且还需在“File”栏中选择一个文件用于放置记录数据。文件上的内容是端口寄存器的内容。如果一个周期中端口寄存器的内容没有改变,就没有输出产生。记录文件在每次程序复位时被删除,在每次程序装入AVR Studio时,记录都将人工激活。
3.使用AVR Studio进行程序调试及软件仿真
在AVR Studio中进行模拟仿真时,其调试算法、程序流程等方面与硬件仿真机没有多大区别。对于I/O端口、定时器、UART、中断响应等方面,在AVR Studio中也可进行模拟仿真。但是,由于硬件仿真机没有提供程序运行时间等方面的参数调试,所以AVR Studio在调试程序、计算一段程序运行所花的时间等方面比硬件仿真更加方便。
图2-14 “Simulator Options”对话框(“Stimuli and logging”选项卡)
程序调试
在AVR Studio的“Debug”(调试)菜单栏中可选择开始调试、停止调试、运行、暂停、设置断点、单步、自动单步等操作。
【开始调试(Start Debugging)】 若源程序在CodeVisionAVR IDE中,通过执行菜单命令“Tools”→“Debugger”导入到AVR Studio,则在AVR Studio中的程序处于开始调试状态。
如果源程序是在AVR Studio中直接编写的,则在AVR Studio中先执行菜单命令“Build”将其编译,若编译程序没有错误,再执行菜单命令“Debug”→“Start Debugging”,或者在工具栏中单击图标 ,还可以按“Ctrl”+“Shift”+“Alt”+“F5”键,源程序进入开始调试状态。
在开始调试状态下,将链接调试平台,装载目标文件并执行复位操作,而所有的调试控制命令处于有效。通常,在调试模式下不能编辑程序。
【停止调试(Stop Debugging)】 如果源程序进入了调试状态,在AVR Studio中执行菜单命令“Debug”→“Stop Debugging”,或者在工具栏中单击图标 ,还可以按“Ctrl”+“Shift”+“F5”键,将停止调试过程,并断开与调试平台的链接,进入源程序的编辑模式。
【运行(RUN)】 如果源程序进入了调试状态,在AVR Studio中执行菜单命令“Debug”→“RUN”,或者在工具栏中单击图标 ,还可以按“F5”键,将启动(或重新启动)程序,使源程序一直运行到被用户停止或遇到一个断点。
【暂停(Break)】 如果源程序进入调试运行状态,在AVR Studio中执行菜单命令“Debug”→“Break”,或者在工具栏中单击图标 ,还可以按“Ctrl”+“F5”键,将停止程序运行。当源程序停止时,所有窗口中的信息都将更新。
【复位(Reset)】 如果源程序进入了调试状态,在AVR Studio中执行菜单命令“Debug”→“Reset”,或者在工具栏中单击图标 ,还可以按“Shift”+“F5”键,将使源程序复位。当程序正在运行时,执行此命令则程序停止运行。
【设置断点(Toggle Breakpoint)】 如果源程序进入了调试状态,在代码前可以设置断点。首先在需要设置断点的代码前单击鼠标左键,然后执行菜单命令“Debug”→“Toggle Breakpoint”,或者在工具栏中单击图标 ,还可以按“F9”键,即可将该行源代码设置为断点。
【单步执行(Step Into)】 单步执行仅执行一条指令。如果源程序进入了调试状态,在AVR Studio中执行菜单命令“Debug”→“Step Into”,或者在工具栏中单击图标 ,还可以按“F11”键,源程序的一条指令会被执行。
【单步运行到断点(Step Over)】 单步运行到断点仅执行一条指令,但是如果这条指令包含或调用了一个函数/子程序时,则该函数/子程序也会同时执行。如果在运行过程中遇到用户设置的断点,则程序运行将被挂起。如果源程序进入了调试状态时,在AVR Studio中执行菜单命令“Debug”→“Step Over”,或者在工具栏中单击图标 ,还可以按“F10”键,源程序的一条指令会被执行。
【跳出(Step Out)】 跳出命令会使程序一直运行,直到当前函数结束。如果遇到用户设置的断点,程序运行将被挂起。当程序处在最外层(如主函数),执行菜单命令“Debug”→“Step Out”,或者在工具栏中单击图标 ,或按“Shift”+“F11”键时,则程序将继续运行,直到遇到一个断点或被用户停止。
【运行到光标处(Run To Cursor)】 如果源程序进入了调试状态,在AVR Studio中执行菜单命令“Debug”→“Run To Cursor”,或者在工具栏中单击图标 ,或者按“Ctrl”+“F10”键时,将使程序运行到源代码编辑窗口中光标处停止。此时如果遇到用户的断点,程序的运行将不会被挂起。如果程序运行永远达不到光标指示处的语句,程序将一直继续运行,直到被用户停止。当此命令结束后,所有窗口中的信息将更新。由于这种方式依赖光标放置的位置,所以只能在C语言窗口方式时才能使用。
【自动运行(Auto Step)】 自动运行能够重复执行指令。如果源程序进入了调试状态时,在AVR Studio中执行菜单命令“Debug”→“Auto Step”,或者在工具栏中单击图标,或者按“Ctrl”+“F10”键时,程序的运行将一直持续单步运行,直到遇到一个用户设置的断点或被用户停止。
软件仿真
源程序在调试运行过程中,通过相应的窗口可以观察各个寄存器的值,从而分析程序是否达到设计要求。
若需观察已导入到AVR Studio的“新建项目”源程序的运行状况时,首先在I/O观察窗口中单击“PORTC”(因为源程序使用了PORTC端口),然后执行自动运行命令时,可以看到“Processor”窗口中的Cycle Counter和Stop Watch中的数据不断更新,而I/O观察窗口中PORTC端口的状态值(Value)每隔1s将发生一次变化,其运行仿真如图2-15所示。若想终止运行,执行菜单命令“Debug”→“Reset”即可。
图2-15 “新建项目”的运行仿真图