第2节 MT-IDE集成开发环境的使用
这一节,将逐步讲述在MT-IDE集成开发环境中,怎样打开、编辑、编译、运行和调试汇编工程和C工程,力图使读者在学习完本节后,就能轻松驾驭MT-IDE集成开发工具,这对以后开发工程项目是十分必要的,此所谓“工欲善其事,必先利其器”。
6.2.1 运行第一个汇编工程实例
在08教学资料目录下的“MC08Ex2007”文件夹中,存放了本书中出现的所有实例工程,如果需要运行这些程序,可以将这个文件夹拷贝到用户的工作目录下。注意,若要调试某个工程,不要在“MC08Ex2007”文件夹中直接运行,而应将相应的工程做一个备份,然后调试、运行这个备份工程。始终保留一个最近调试成功的工程,而每次修改仅在相应的备份上进行,这样做是十分必要的,因为一旦修改错误,而又找不到症结所在时,还可以使调试工作还原到一个最近的正确点上,以便重新开始。
下面,将使用这个方法,运行在第四章中已分析过的第一个汇编工程PrgFrame。
1.打开工程
运行MT-IDE软件,选择[文件]菜单下的[打开工程]选项,在弹出的“打开”对话框中,选择PrgFrame工程所在路径,打开该工程中的“PrgFrame.prj”文件,即可打开整个工程。
在运行界面左边的工程文件列表区显示了PrgFrame的文件组织情况,可以看到该工程由头文件(GP32ASM.h、Includes.h和LED.h)、源程序文件(GeneralFun.s、LED.s、Main.s、MCUinit.s和Vectors08.s)以及其他文件(仅为 .txt类型,是工程的说明文档)组成。这些文件已在第四章分析过,这里不再详述。初始时,编辑区显示的是主程序文件(Main.s),如果要在编辑区显示其他工程文件,只需双击列表区相应的文件名即可。
2.编译工程
选择[编译]菜单下的[编译源程序]选项,或直接单击编译下载工具栏中的编译图标(如图6-7所示),就可以完成源程序的编译。
3.下载机器码
现在要把编译后产生的机器码烧写到芯片中。
①PrgFrame工程的控制芯片是MC908GP32 MCU,所以打开教学实验箱后,第一步要检查所使用的核心板是GP32核心板。
②将08写入器的USB一端与PC相连(之前已装过USB驱动,现在PC是能识别该写入器的),另一端与核心板上的MON08接口相连。
③将核心板上的电源开关、晶振开关拨向“写入器”一侧 ,使核心板上的电源和晶振都来自写入器。
④点击MT-IDE编译下载工具栏上的“USB擦除/下载”按钮,弹出“通过USB下载”对话框,对芯片进行擦除、写入操作;也可以在[Flash操作]菜单中,执行以上动作。
4.连接硬件对象
PrgFrame工程的功能是用A口的1引脚控制小灯闪烁,所以只要用导线将A口的1引脚与扩展板上的一盏小灯相连即可。注意:普通I/O口A~D,可在核心板上直接找到;而MCU的其他引脚则通过核心板与扩展板的接口,引到了扩展板上。
5.运行芯片中的程序
有两种方法:
①在MT-IDE软件系统中点击运行图标,通过写入器向MCU发送运行命令,使程序开始运行。注意这时核心板上的电源开关和晶振开关还是拨在写入器一侧的。
②将核心板上的电源开关和晶振开关拨向“扩展板”一侧,这时核心板电源来自扩展板,晶振来自核心板自身的晶振电路。现在,要确保实验箱中扩展板的电源已经连接好,此时,按动扩展板上的复位按钮,芯片中的程序就执行起来了,正如工程描述中所说,小灯在不停的闪烁。
6.调试程序
这里介绍两种实用的调试方法:
(1) 跟踪法
首先,编译源程序并下载到MCU中,并保持核心板上的电源开关、晶振开关拨向“写入器”一侧。其次,将光标停留在需要设置断点的程序代码上,点击菜单栏上的[调试]菜单,下拉选择[设置断点]即可;也可以通过点击工具栏上的图标来设置断点。然后点击菜单栏上的[调试]菜单,下拉选择[开始调试],进入调试界面,如图6-8所示
在[单步步过]或者[单步步入]的执行过程中,可以通过观察寄存器跟踪窗口中寄存器的值的变化来判断程序是否正确执行。寄存器窗口中列出了HC08中的所有寄存器。
如果想观察某个存储器单元的内容,可以在存储器跟踪窗口中输入相应的地址,键入回车后,进行观察。例如,在汇编工程中定义了如下语句:
.org RAMstartAddr //RAM的起始地址为0x0040
I1: . blkb 1
若在调试过程中想知道当前全局变量I1的值,就可以在存储器跟踪窗口中输入I1的地址0x0040,再键入回车即可。
如果需要查看某一段存储区域的内容,可在下载完程序后,选择[flash操作]中的[读取]选项,读取某一范围内的存储器内容。注意:该操作不能在单步调试时进行。
单步调试结束后,点击菜单栏上的“调试”菜单,下拉选择“退出调试”,也可以点击工具栏上的相应图标结束调试。
(2) 程序法
如果希望程序执行到某个语句就不再向下执行,可在该语句后加入“BRA .”语句。该语句的含义是使程序流无条件转向自身。这样做和使用断点调试是异曲同工的。
如果想观察某个寄存器或者任意存储空间的值,可以通过串口调试实现。例如,要在执行完某个语句后,观察存储单元0x8000处的值,可在该语句后添加:
LDA 0x8000 //将存储单元0x8000中的值,放入寄存器A
JSR SCISend1 //工程中应已包含串行通信文件,才可调用该函数
当执行完以上语句,0x8000处的值就通过串口发送给PC并显示出来。
7.实验中常见问题与解决方法
在实验过程中,会因为一些疏忽,而得不到预期的实验结果,例如,会有以下常见错误:
①在对芯片执行擦除写入操作时,若出现“连接失败”提示,应检查是否已经安装该USB驱动,如果已经安装,应拔出写入器的USB一端,重新插入,复位编程器。如果总是提示进入监控失败信息,这时应该检查电源晶振开关是否拨向“写入器”一侧,写入器的MON08接口是否与核心板接反了。
②如果写入程序后,按动复位按钮,发现小灯不闪烁,可以检查核心板是否以正确的方向插在扩展板上,导线是否连在A口的1引脚上,而不是其他引脚,如果以上都正确,再检查程序中的延时是否足够的长。
③如果总是擦除、写入失败,应考虑写入器、芯片、核心板或是扩展板这些硬件设备是否被损坏。这时应找来一个完好的硬件系统,用部件替换法逐个检测以上硬件设备是否完好。例如,有两个硬件系统A和B。A是有故障的,B是完好的系统。先用A的写入器替换掉B的,并在B系统上实验,如果擦写失败,说明A的写入器已损坏,需要更换,如果能正常工作,再把A的芯片替换到B系统上检测。用同样的方法逐个检测A系统上的部件,直到找出所有故障所在。
6.2.2 编译过程中产生的文件
PrgFrame汇编工程编译成功后,会产生如下文件:PrgFrame.s19(目标代码文件)、main.lis(列表文件)、PrgFrame.dbg(带有调试信息的文件)、PrgFrame.mp(存储映像文件)、main.o(目标对象文件)等。这里介绍其中的两个文件:S19文件和Lis文件,这两个文件可在[查看]菜单中选择打开,或通过点击编译调试工具栏中相应的图标打开。
1.目标代码文件(*.s19)
S19文件是Motorola MCU的机器码文件,将其下载到MCU内部Flash存储器之后,MCU执行这些机器码。
目标代码文件(.S19)是以S记录格式表示的机器码文件。S记录格式是Freescale公司的十六进制目标代码文件,它将目标程序和数据以可打印的ASCII码格式表示,可直接显示和打印。目标文件由若干行S记录构成,每行S记录可以用CR/LF/NUL结尾。一行S记录由下列五部分组成:
类型 记录长度 地 址 编码/数据 校验和
2字节 2字节 2、3或4字节 0~n字节 1字节
分别说明如下:
①类型
表示S记录的类型。共有8种记录类型S0、S1、S2、S3、S5、S6、S8、S9。它们是为了满足不同的编码、传送方式以及解码的需求。ASM08编译器只使用S1、S9两种类型构成目标文件。
S1—地址为2字节的代码/数据记录。
S9—S1记录的结束记录。该记录没有程序/数据部分。地址部分可包含控制将转向的2字节地址,如果不指定,则为第一次使用的入口地址。
S2—地址为3字节的代码/数据记录。
S8—S2记录的结束记录。
S3—地址为4字节的代码/数据记录。
S7—S3记录的结束记录。
S5—如果有,表示文件中总共有多少个S1、S2和S3记录。
②记录长度
表示该记录行中字符对的数目,不包括类型和记录长度。
③地址
它可以是2个字节、3个字节或4个字节,取决于记录类型。S1记录、S9记录均是2个字节。它表示其后的编码/数据部分将要装入的存储器起始地址。
④编码/数据
就是实际的目标程序或数据,这一部分将被下载到嵌入式的程序存储器并运行。其字节数是由“记录长度”域的实际数值减去地址长度和校验码长度得到的。
⑤校验和
为1个字节,它是“记录长度”、“地址”、“编码/数据”三个部分所有字节之和的反码的低8位。供装入嵌入式时校验之用。
例如:S105FFFE80007D,最后的7D就是校验和,计算方法是:
05+FF+FE+80+00=0282 (十六进制运算)
将低字节0x82,即0B10000010,取反得到0B01111101,即0x7D。
表6-1是PrgFrame工程编译后得到的S19文件,它由7行S记录构成:
S记录是以ASCII码形式的机器码表示,一个机器码字节需要用2个ASCII码表示。若每个S记录有32个机器码字节,加上S1字头、记录长度、地址、校验码,则每条记录需要以74个字节存盘,则10KB机器码的S19文件大小会有23690B之多。特别提醒:S19文件大小不是机器码的大小。
2.列表文件(*.lis)
在Lis文件中可以对照查看汇编源程序和相应的机器码以及这些指令和数据将要放入的相对或绝对地址。如表6-1,列出了PrgFrame工程汇编后产生的列表文件main.lis的部分内容,列表文件的格式如下:
地址 目标码 汇编指令
“地址”是该指令目标码的首地址的十六进制值,“目标码”是与汇编指令对应的十六进制机器码字节。如下表中带阴影一行,“SEI //关总中断”是汇编源程序中的一条语句和相应的注释,9B是SEI这条指令所对应的机器码,0x8000是该机器码将被写于芯片存储器中的地址。由于在汇编源程序中包含绝对定位语句“.org $XXXX”,所以表6-2中的地址是绝对地址。如果没有这种定位语句,则生成相对地址,从0x0000开始编址,就无法正确运行。
上一小节,介绍了如何打开、运行及调试一个已存在的汇编工程。如果要创建一个新的汇编工程应如何操作呢,现在,就介绍两种新建工程的方法:
1.拷贝新建法
顾名思意,就是拷贝一个已有的工程,然后在此基础上进行修改,得到一个满足需求的新工程。例如,现在要新建一个汇编工程,完成用一个开关控制一盏灯(开关打开,小灯亮;开关闭合,小灯暗)的功能。给这个工程命名为SwitchCtrl。它和第一个实例工程PrgFrame十分相似,所以可以利用PrgFrame新建SwitchCtrl。步骤如下:
①拷贝并重命名PrgFrame工程文件夹。
②在工程文件夹中修改工程文件名“PrgFrame.prj”为“SwitchCtrl.prj”。由于新工程中的控制芯片与原工程相同,所以所有的面向芯片文件(GP32ASM.h、MCUinit.s和Vectors08.s)都无须修改,直接重用。新工程根据所读取的开关输入值(0/1),驱动小灯亮、暗,是面向小灯和开关编程的。所以原工程中的小灯控制文件,应该保留,同时还应准备创建面向开关的文件Switch.s和Switch.h,分别用于读取开关输入值和定义开关控制引脚。原来的通用程序文件有GeneralFun.s和Includes.h,新工程中并不需要延时所以可以删除GeneralFun.s文件,而Includes.h和主程序文件(Main.s)必须保留并做必要的改动。
③对原有工程在文件层上做必要的增删后,就要开始编辑新工程了。在MT-IDE软件中打开新工程中的工程文件SwitchCtrl.prj,发现并没有打开整个工程(工程列表中没有具体的程序文件),原因是在上一步中修改了工程文件名,这时要在列表中的工程文件目录上右击添加工程文件夹中已有的文件或通过文件菜单中的新建选项,新建程序文件。单击文件菜单中的新建选项,出现新建对话框,选择新建文件选项卡,填入新文件的路径,文件名,文件类型,用这种方法可在工程中新建“.s”“.h”“.txt”三种类型的文件。本工程中需要新建Switch.s和Switch.h文件。在列表中可以看到所有程序文件后,双击相应文件名,就可在编辑区打开对应的程序文件,进行编辑修改了。
2.向导新建法
打开MT-IDE软件,点击文件菜单下的新建选项,选择新建工程选项卡,填写所建工程的路径,工程名,工程类型(汇编/C),工程的控制芯片等信息,确定后,将会自动生成所需的汇编工程框架。框架中已包含所有面向芯片的程序文件和主程序文件框架,对这些文件,只须根据需要稍加修改即可。另外,还要在工程中新建硬件对象的控制程序文件,和必要通用程序文件。新建文件的方法已经讨论过,这里不再详述。
用以上任何一种方法新建工程,组织好文件后,就可以开始编辑,编译,调试程序了,这些操作的具体方法请参见上一小节,这里不再阐述。
6.2.4 运行第一个C工程实例
运行C工程的步骤也可以分成打开工程、编译工程、下载工程、连接硬件对象、运行芯片中程序和调试等。6.2.1节详细介绍了运行第一个汇编工程的具体步骤,参照这些步骤,可以运行第一个C工程实例,这里不再具体阐述,只是列出运行C工程与运行汇编工程的不同之处。
(1) 编译过程产生的List文件不同
C工程编译产生的List文件如表6-3所示,与汇编工程不同之处在于C工程编译产生的List文件中包含了C语句以及其对应的汇编语句,并对其中的C语句加上了行号,即表6-3中所示的(0014)之类,方便阅读,C工程编译产生的List文件的阅读方法同汇编工程,这里不再阐述。
C工程的调试方法也分为跟踪法和程序法两种,程序法同汇编工程,只将串行口的子程序换成相应的C函数即可。在跟踪法中,C工程的调试界面如图6-9所示。其中寄存器跟踪窗口和存储器跟踪窗口的调试方法同汇编,这里不再阐述。在变量跟踪窗口中可以输入C工程中定义的变量,在调试中,窗口中变量的值将随程序的执行而发生改变。
6.2.1 运行第一个汇编工程实例
在08教学资料目录下的“MC08Ex2007”文件夹中,存放了本书中出现的所有实例工程,如果需要运行这些程序,可以将这个文件夹拷贝到用户的工作目录下。注意,若要调试某个工程,不要在“MC08Ex2007”文件夹中直接运行,而应将相应的工程做一个备份,然后调试、运行这个备份工程。始终保留一个最近调试成功的工程,而每次修改仅在相应的备份上进行,这样做是十分必要的,因为一旦修改错误,而又找不到症结所在时,还可以使调试工作还原到一个最近的正确点上,以便重新开始。
下面,将使用这个方法,运行在第四章中已分析过的第一个汇编工程PrgFrame。
1.打开工程
运行MT-IDE软件,选择[文件]菜单下的[打开工程]选项,在弹出的“打开”对话框中,选择PrgFrame工程所在路径,打开该工程中的“PrgFrame.prj”文件,即可打开整个工程。
在运行界面左边的工程文件列表区显示了PrgFrame的文件组织情况,可以看到该工程由头文件(GP32ASM.h、Includes.h和LED.h)、源程序文件(GeneralFun.s、LED.s、Main.s、MCUinit.s和Vectors08.s)以及其他文件(仅为 .txt类型,是工程的说明文档)组成。这些文件已在第四章分析过,这里不再详述。初始时,编辑区显示的是主程序文件(Main.s),如果要在编辑区显示其他工程文件,只需双击列表区相应的文件名即可。
2.编译工程
选择[编译]菜单下的[编译源程序]选项,或直接单击编译下载工具栏中的编译图标(如图6-7所示),就可以完成源程序的编译。

3.下载机器码
现在要把编译后产生的机器码烧写到芯片中。
①PrgFrame工程的控制芯片是MC908GP32 MCU,所以打开教学实验箱后,第一步要检查所使用的核心板是GP32核心板。
②将08写入器的USB一端与PC相连(之前已装过USB驱动,现在PC是能识别该写入器的),另一端与核心板上的MON08接口相连。
③将核心板上的电源开关、晶振开关拨向“写入器”一侧 ,使核心板上的电源和晶振都来自写入器。
④点击MT-IDE编译下载工具栏上的“USB擦除/下载”按钮,弹出“通过USB下载”对话框,对芯片进行擦除、写入操作;也可以在[Flash操作]菜单中,执行以上动作。
4.连接硬件对象
PrgFrame工程的功能是用A口的1引脚控制小灯闪烁,所以只要用导线将A口的1引脚与扩展板上的一盏小灯相连即可。注意:普通I/O口A~D,可在核心板上直接找到;而MCU的其他引脚则通过核心板与扩展板的接口,引到了扩展板上。
5.运行芯片中的程序
有两种方法:
①在MT-IDE软件系统中点击运行图标,通过写入器向MCU发送运行命令,使程序开始运行。注意这时核心板上的电源开关和晶振开关还是拨在写入器一侧的。
②将核心板上的电源开关和晶振开关拨向“扩展板”一侧,这时核心板电源来自扩展板,晶振来自核心板自身的晶振电路。现在,要确保实验箱中扩展板的电源已经连接好,此时,按动扩展板上的复位按钮,芯片中的程序就执行起来了,正如工程描述中所说,小灯在不停的闪烁。
6.调试程序
这里介绍两种实用的调试方法:
(1) 跟踪法
首先,编译源程序并下载到MCU中,并保持核心板上的电源开关、晶振开关拨向“写入器”一侧。其次,将光标停留在需要设置断点的程序代码上,点击菜单栏上的[调试]菜单,下拉选择[设置断点]即可;也可以通过点击工具栏上的图标来设置断点。然后点击菜单栏上的[调试]菜单,下拉选择[开始调试],进入调试界面,如图6-8所示

在[单步步过]或者[单步步入]的执行过程中,可以通过观察寄存器跟踪窗口中寄存器的值的变化来判断程序是否正确执行。寄存器窗口中列出了HC08中的所有寄存器。
如果想观察某个存储器单元的内容,可以在存储器跟踪窗口中输入相应的地址,键入回车后,进行观察。例如,在汇编工程中定义了如下语句:
.org RAMstartAddr //RAM的起始地址为0x0040
I1: . blkb 1
若在调试过程中想知道当前全局变量I1的值,就可以在存储器跟踪窗口中输入I1的地址0x0040,再键入回车即可。
如果需要查看某一段存储区域的内容,可在下载完程序后,选择[flash操作]中的[读取]选项,读取某一范围内的存储器内容。注意:该操作不能在单步调试时进行。
单步调试结束后,点击菜单栏上的“调试”菜单,下拉选择“退出调试”,也可以点击工具栏上的相应图标结束调试。
(2) 程序法
如果希望程序执行到某个语句就不再向下执行,可在该语句后加入“BRA .”语句。该语句的含义是使程序流无条件转向自身。这样做和使用断点调试是异曲同工的。
如果想观察某个寄存器或者任意存储空间的值,可以通过串口调试实现。例如,要在执行完某个语句后,观察存储单元0x8000处的值,可在该语句后添加:
LDA 0x8000 //将存储单元0x8000中的值,放入寄存器A
JSR SCISend1 //工程中应已包含串行通信文件,才可调用该函数
当执行完以上语句,0x8000处的值就通过串口发送给PC并显示出来。
7.实验中常见问题与解决方法
在实验过程中,会因为一些疏忽,而得不到预期的实验结果,例如,会有以下常见错误:
①在对芯片执行擦除写入操作时,若出现“连接失败”提示,应检查是否已经安装该USB驱动,如果已经安装,应拔出写入器的USB一端,重新插入,复位编程器。如果总是提示进入监控失败信息,这时应该检查电源晶振开关是否拨向“写入器”一侧,写入器的MON08接口是否与核心板接反了。
②如果写入程序后,按动复位按钮,发现小灯不闪烁,可以检查核心板是否以正确的方向插在扩展板上,导线是否连在A口的1引脚上,而不是其他引脚,如果以上都正确,再检查程序中的延时是否足够的长。
③如果总是擦除、写入失败,应考虑写入器、芯片、核心板或是扩展板这些硬件设备是否被损坏。这时应找来一个完好的硬件系统,用部件替换法逐个检测以上硬件设备是否完好。例如,有两个硬件系统A和B。A是有故障的,B是完好的系统。先用A的写入器替换掉B的,并在B系统上实验,如果擦写失败,说明A的写入器已损坏,需要更换,如果能正常工作,再把A的芯片替换到B系统上检测。用同样的方法逐个检测A系统上的部件,直到找出所有故障所在。
6.2.2 编译过程中产生的文件
PrgFrame汇编工程编译成功后,会产生如下文件:PrgFrame.s19(目标代码文件)、main.lis(列表文件)、PrgFrame.dbg(带有调试信息的文件)、PrgFrame.mp(存储映像文件)、main.o(目标对象文件)等。这里介绍其中的两个文件:S19文件和Lis文件,这两个文件可在[查看]菜单中选择打开,或通过点击编译调试工具栏中相应的图标打开。
1.目标代码文件(*.s19)
S19文件是Motorola MCU的机器码文件,将其下载到MCU内部Flash存储器之后,MCU执行这些机器码。
目标代码文件(.S19)是以S记录格式表示的机器码文件。S记录格式是Freescale公司的十六进制目标代码文件,它将目标程序和数据以可打印的ASCII码格式表示,可直接显示和打印。目标文件由若干行S记录构成,每行S记录可以用CR/LF/NUL结尾。一行S记录由下列五部分组成:
类型 记录长度 地 址 编码/数据 校验和
2字节 2字节 2、3或4字节 0~n字节 1字节
分别说明如下:
①类型
表示S记录的类型。共有8种记录类型S0、S1、S2、S3、S5、S6、S8、S9。它们是为了满足不同的编码、传送方式以及解码的需求。ASM08编译器只使用S1、S9两种类型构成目标文件。
S1—地址为2字节的代码/数据记录。
S9—S1记录的结束记录。该记录没有程序/数据部分。地址部分可包含控制将转向的2字节地址,如果不指定,则为第一次使用的入口地址。
S2—地址为3字节的代码/数据记录。
S8—S2记录的结束记录。
S3—地址为4字节的代码/数据记录。
S7—S3记录的结束记录。
S5—如果有,表示文件中总共有多少个S1、S2和S3记录。
②记录长度
表示该记录行中字符对的数目,不包括类型和记录长度。
③地址
它可以是2个字节、3个字节或4个字节,取决于记录类型。S1记录、S9记录均是2个字节。它表示其后的编码/数据部分将要装入的存储器起始地址。
④编码/数据
就是实际的目标程序或数据,这一部分将被下载到嵌入式的程序存储器并运行。其字节数是由“记录长度”域的实际数值减去地址长度和校验码长度得到的。
⑤校验和
为1个字节,它是“记录长度”、“地址”、“编码/数据”三个部分所有字节之和的反码的低8位。供装入嵌入式时校验之用。
例如:S105FFFE80007D,最后的7D就是校验和,计算方法是:
05+FF+FE+80+00=0282 (十六进制运算)
将低字节0x82,即0B10000010,取反得到0B01111101,即0x7D。
表6-1是PrgFrame工程编译后得到的S19文件,它由7行S记录构成:

S记录是以ASCII码形式的机器码表示,一个机器码字节需要用2个ASCII码表示。若每个S记录有32个机器码字节,加上S1字头、记录长度、地址、校验码,则每条记录需要以74个字节存盘,则10KB机器码的S19文件大小会有23690B之多。特别提醒:S19文件大小不是机器码的大小。
2.列表文件(*.lis)
在Lis文件中可以对照查看汇编源程序和相应的机器码以及这些指令和数据将要放入的相对或绝对地址。如表6-1,列出了PrgFrame工程汇编后产生的列表文件main.lis的部分内容,列表文件的格式如下:
地址 目标码 汇编指令
“地址”是该指令目标码的首地址的十六进制值,“目标码”是与汇编指令对应的十六进制机器码字节。如下表中带阴影一行,“SEI //关总中断”是汇编源程序中的一条语句和相应的注释,9B是SEI这条指令所对应的机器码,0x8000是该机器码将被写于芯片存储器中的地址。由于在汇编源程序中包含绝对定位语句“.org $XXXX”,所以表6-2中的地址是绝对地址。如果没有这种定位语句,则生成相对地址,从0x0000开始编址,就无法正确运行。


上一小节,介绍了如何打开、运行及调试一个已存在的汇编工程。如果要创建一个新的汇编工程应如何操作呢,现在,就介绍两种新建工程的方法:
1.拷贝新建法
顾名思意,就是拷贝一个已有的工程,然后在此基础上进行修改,得到一个满足需求的新工程。例如,现在要新建一个汇编工程,完成用一个开关控制一盏灯(开关打开,小灯亮;开关闭合,小灯暗)的功能。给这个工程命名为SwitchCtrl。它和第一个实例工程PrgFrame十分相似,所以可以利用PrgFrame新建SwitchCtrl。步骤如下:
①拷贝并重命名PrgFrame工程文件夹。
②在工程文件夹中修改工程文件名“PrgFrame.prj”为“SwitchCtrl.prj”。由于新工程中的控制芯片与原工程相同,所以所有的面向芯片文件(GP32ASM.h、MCUinit.s和Vectors08.s)都无须修改,直接重用。新工程根据所读取的开关输入值(0/1),驱动小灯亮、暗,是面向小灯和开关编程的。所以原工程中的小灯控制文件,应该保留,同时还应准备创建面向开关的文件Switch.s和Switch.h,分别用于读取开关输入值和定义开关控制引脚。原来的通用程序文件有GeneralFun.s和Includes.h,新工程中并不需要延时所以可以删除GeneralFun.s文件,而Includes.h和主程序文件(Main.s)必须保留并做必要的改动。
③对原有工程在文件层上做必要的增删后,就要开始编辑新工程了。在MT-IDE软件中打开新工程中的工程文件SwitchCtrl.prj,发现并没有打开整个工程(工程列表中没有具体的程序文件),原因是在上一步中修改了工程文件名,这时要在列表中的工程文件目录上右击添加工程文件夹中已有的文件或通过文件菜单中的新建选项,新建程序文件。单击文件菜单中的新建选项,出现新建对话框,选择新建文件选项卡,填入新文件的路径,文件名,文件类型,用这种方法可在工程中新建“.s”“.h”“.txt”三种类型的文件。本工程中需要新建Switch.s和Switch.h文件。在列表中可以看到所有程序文件后,双击相应文件名,就可在编辑区打开对应的程序文件,进行编辑修改了。
2.向导新建法
打开MT-IDE软件,点击文件菜单下的新建选项,选择新建工程选项卡,填写所建工程的路径,工程名,工程类型(汇编/C),工程的控制芯片等信息,确定后,将会自动生成所需的汇编工程框架。框架中已包含所有面向芯片的程序文件和主程序文件框架,对这些文件,只须根据需要稍加修改即可。另外,还要在工程中新建硬件对象的控制程序文件,和必要通用程序文件。新建文件的方法已经讨论过,这里不再详述。
用以上任何一种方法新建工程,组织好文件后,就可以开始编辑,编译,调试程序了,这些操作的具体方法请参见上一小节,这里不再阐述。
6.2.4 运行第一个C工程实例
运行C工程的步骤也可以分成打开工程、编译工程、下载工程、连接硬件对象、运行芯片中程序和调试等。6.2.1节详细介绍了运行第一个汇编工程的具体步骤,参照这些步骤,可以运行第一个C工程实例,这里不再具体阐述,只是列出运行C工程与运行汇编工程的不同之处。
(1) 编译过程产生的List文件不同
C工程编译产生的List文件如表6-3所示,与汇编工程不同之处在于C工程编译产生的List文件中包含了C语句以及其对应的汇编语句,并对其中的C语句加上了行号,即表6-3中所示的(0014)之类,方便阅读,C工程编译产生的List文件的阅读方法同汇编工程,这里不再阐述。


C工程的调试方法也分为跟踪法和程序法两种,程序法同汇编工程,只将串行口的子程序换成相应的C函数即可。在跟踪法中,C工程的调试界面如图6-9所示。其中寄存器跟踪窗口和存储器跟踪窗口的调试方法同汇编,这里不再阐述。在变量跟踪窗口中可以输入C工程中定义的变量,在调试中,窗口中变量的值将随程序的执行而发生改变。



