源程序编译及调试-最新课件_第1页
源程序编译及调试-最新课件_第2页
源程序编译及调试-最新课件_第3页
源程序编译及调试-最新课件_第4页
源程序编译及调试-最新课件_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第6章 源程序编译及调试第6章 源程序编译及调试学习嵌入式系统,需要有一个基本的硬件软件环境。一个适合入门的硬件软件环境应该具有硬件可拼接、实例程序丰富、操作简单。苏州大学Freescale嵌入式系统实验室在飞思卡尔公司的大力支持下,研发成功的MT-IDE For HC08 / S08集成开发套件,适用于Freescale公司各种08芯片,具备上述特点。本书的所有程序都是在该环境中编写及调试的。MT-IDE是中文版的,可以在网上免费下载最新版本,对程序编译和下载没有任何限制,也用于实际项目的开发,已经在国内得到较广泛的使用。希望快速入门的读者可以选用MT-IDE,随MT-IDE开发环境所附有大

2、量的样例程序,含有规范的中文注释及封装合理的子程序,对于Freescale MCU的初学者来说是一个宝贵的资源。同时本章也对Metrowerks公司的CodeWarrior软件做了简要介绍,CodeWarrior是一个针对Freescale MCU的商业软件,其功能强大,价格也很高。用于免费教学的特别版有代码量的限制,生成的代码不能超过12KB,包含的工程文件数不超过30个。对于Freescale MCU的初学者需要花费更多的时间入门,因为CodeWarrior功能强大,所以相对复杂,并且是英文版的,在短时间内难以掌握其用法。本章还讲述汇编及08C源程序编译过程、编译时产生的相关文件及调试方法

3、。阅读本章内容之后,应该立即进行实践,或边阅读,边实践。从实践中理解工程的含义、S19文件的含义、List文件的用处等内容,从实践中学会编辑程序、编译程序、下载程序、调试程序。通过初步实践后,你会发现使用MT-IDE通用开发套件进行的嵌入式程序的调试与在PC机上进行的PC机的一般高级语言程序调试区别并不大,也许你看到的区别主要是嵌入式程序需要下载到目标对象中才能调试。MT-IDE中的调试是真实的调试,不是早期的仿真方法,这得益于Flash存储器的发展与调试手段的进步。为了今后调试程序的顺利,不仅要熟练操作过程,还要能够理解S19文件、List文件,能够在S19文件与List文件中找到一个语句或

4、一段程序产生的机器码。6.1 MT-IDE集成开发套件苏州大学Freescale嵌入式系统实验室研发的MT-IDE For HC08 / S08 /S12等一系列Freescale 8位和16位MCU的集成开发套件由硬件系统和软件系统组成。硬件系统包括写入调试器、核心板和扩展板,软件系统具有工程管理、源程序编辑、编译等功能,同时通过USB接口与写入调试器通信,完成下载及调试。开发套件的结构框图如图6-1所示。本开发套件可作为Freescale系列MCU教学和培训班的实验器材,也可以作为技术人员开发项目时的开发工具。6.1.1 硬件平台MT-IDE通用开发套件硬件及接口部分主要包括扩展板MT-E

5、xtend Board I、核心板MT-Core和HC08写入调试器MT-Programmer三个部分。扩展板核心板PC写入调试器图6-1 MT-IDE集成开发套件结构框图(1) 扩展板MT-Extend Board I图6-2 MTExtend Board I型扩展板实物图MTExtend Board I型扩展板适用于HC08、HCS08、HC12、HCS12等系列MCU的核心板,提供160Pin核心板底座接口、LED灯、蜂鸣器、继电器、8段数码管、LCD、4×4键盘、8组开关、模拟电位计、红外传感器、光敏传感器、热敏传感器、串行口、USB、CAN、IIC、SPI、以太网口等接口,

6、基本包括了08和12系列MCU所具有的模块接口。扩展板硬件实物如图6-2所示。这些模块接口大致可以分成下面几类: 电源模块:MTExtend Board I型扩展板提供3.3V、5V、12V三种直流电源。 基本I/O模块:MTExtend Board I型扩展板上的调试小灯、拔码开关和蜂鸣器等模块均属于基本I/O模块。调试小灯模块:扩展板用LED提供8位数字量的输出。拔码开关模块:扩展板用拨码开关提供8位数字量的输入。蜂鸣器模块:当控制点为高电平时,蜂鸣器响;为低电平时,蜂鸣器不响。 串行口模块:利用串行线可以将扩展板的串行口与计算机的串口连接起来,实现通信。 复位按钮:利用扩展板上的复位按钮

7、可以向MCU的复位引脚输入低电平,实现MCU的复位。 其他模块:扩展板上还包括LCD、4×4键盘、8组开关、模拟电位计、红外传感器、光敏传感器、热敏传感器、USB、CAN、IIC、SPI、以太网口等模块接口,在实际使用时请参照实验指导书,也可以在网站Http:/或Http:/上下载相关资料。(2) 核心板MT-CoreMON08接口Core1Core2GP32最小系统Core3Core4电源开关晶振开关图6-3 MC908GP32CB核心板实物图本开发套件采用扩展板+核心板的模式,特别是适合于Freescale的芯片型号多,并且由于新型号MCU不断涌现的优点,针对不同类型的MCU,只

8、需要更换核心板就可以立即开展工作。对于不同MCU,需要设计相应的核心板,目前本实验室已经配备的核心板有MC908GZ60、MC908GP32、MC908JB8、MC908MR8、MC9S08GB60、MC9S12DG128、MC9S12NE64、MC9S12UF32,对于这些核心板具体内容请见附录F。下面以GP32核心板为例进行分析,图6-3是MC908GP32芯片的核心板的实物图。如图所示,核心板主要由以下几个部分组成:芯片的最小系统:使芯片能工作起来的最小结构,它一般由MCU、晶振电路、电源供给、滤波电路和复位电路等组成。电源开关与晶振开关:电源开关和晶振开关拨动到扩展板端,则核心板电源来

9、自扩展板,晶振来自核心板自身的晶振电路。电源开关和晶振开关拨动到写入器端,则核心板电源来自写入器,晶振也来自写入器,此时写入调试器可以对主控MCU进入写入和在线调试工作。编程接口:HC08MCU的编程接口就是MON08接口,S08MCU的编程接口是BDM接口。8路A/D口LCD接口键盘口SPI接口Core1接口Core2接口通用I/O口LED接口Core3接口Core4接口图6-4 GP32核心板和扩展板接口原理图与扩展板的接口:图6-4所示。图中Core14为GP32核心板和扩展板接口。除了在核心板上可以直接使用的普通I/O口(PTA、PTB、PTC、PTD),其它的都是核心板与扩展板的接口

10、,并在扩展板上有相应的扩展口,可用于接口模块的手动连线。(3) HC08/HCS08写入调试器MT-ProgrammerMT-Programmer For HC08/HCS08(如图6-5所示)是针对Freescale 08系列MCU而研制的写入调试器,它支持目前HC08/HCS08系列各种不同型号的MCU。MT-Programmer是目标核心板和PC机之间的联系纽带,它以USB接口同PC机通信,通过MON08接口或BDM接口和目标核心板相连,配合PC方软件实现擦除、下载、调试、读Flash数据等功能。MON08BDM图6-5 MT-Programmer图6.1.2 软件概述1MT-IDE软件

11、系统的功能和特点调试工具栏常用工具栏菜单栏编译下载工具栏代码编辑区工程文件列表区编译调试信息区调试数据区状态栏图6-6 MT-IDE运行界面MT-IDE For HC08集成开发环境的软件系统(如图6-6所示),是针对Freescale HC08系列MCU的开发工具,采用Windows风格,提供友好的操作界面,具有编辑、编译、下载、调试等功能,通用性强,使用方便。具体功能如下:支持Freescale HC08系列的所有MCU以工程的方式管理文件支持C和汇编语言的源文件编辑、编译支持HC08系列MCU的Flash操作(擦除写入和读出)支持C和汇编语言的断点调试与单步调试支持内存与寄存器观察支持S

12、-Record文件软件运行环境:Windows2000及更高版本的Windows操作系统。2MT-IDE软件系统的安装(1) 安装MT-IDE软件该软件的安装十分方便简单,只要运行“Setup.exe”文件,然后根据安装向导的提示,就可以轻松完成。当成功安装本软件后,将会在安装目录下产生如下文件夹:bin:可执行程序文件夹。Docs:说明文档文件夹。包含软件使用的说明文档。Include:08C头文件夹。包含08C编译器用到的C的头文件。Lib:08C库文件夹。包含08C链接时用到的库文件。Stationary:框架程序文件夹。包含各种芯片的基本的框架程序,在新建工程时,作为空工程的模板。(2

13、) 安装USB驱动MT-IDE软件集程序的编辑、编译和调试功能于一体,工程源文件在该软件系统中,被编译、连接形成目标文件后,还要通过写入调试器,下载到核心板上的芯片中运行。初次将写入器与PC的USB口相连时,会弹出“找到新的硬件向导”对话框,因为PC并不识别该硬件设备,需要安装相应的驱动程序。注意在安装过程中,当询问“Windows可以连接到Windows Update以搜索软件吗?”时,应选择“否,暂时不”,以便从列表或指定位置安装,实际所要安装的驱动程序是安装目录下bin文件夹中的usbio_el.sys,该驱动程序将安装在C:WINDOWSSystem32Drivers中。完成安装后,设

14、备管理器中增加了USBIO controlled devices一项,且其下有USBIO-Device 1(查看属性可知这就是08 Programmer)。6.2 MT-IDE集成开发环境的使用这一节,将逐步讲述在MT-IDE集成开发环境中,怎样打开、编辑、编译、运行和调试汇编工程和C工程,力图使读者在学习完本节后,就能轻松驾驭MT-IDE集成开发工具,这对以后开发工程项目是十分必要的,此所谓“工欲善其事,必先利其器”。6.2.1 运行第一个汇编工程实例在08教学资料目录下的“MC08Ex2007”文件夹中,存放了本书中出现的所有实例工程,如果需要运行这些程序,可以将这个文件夹拷贝到用户的工作

15、目录下。注意,若要调试某个工程,不要在“MC08Ex2007”文件夹中直接运行,而应将相应的工程做一个备份,然后调试、运行这个备份工程。始终保留一个最近调试成功的工程,而每次修改仅在相应的备份上进行,这样做是十分必要的,因为一旦修改错误,而又找不到症结所在时,还可以使调试工作还原到一个最近的正确点上,以便重新开始。下面,将使用这个方法,运行在第四章中已分析过的第一个汇编工程PrgFrame。1打开工程运行MT-IDE软件,选择文件菜单下的打开工程选项,在弹出的“打开”对话框中,选择PrgFrame工程所在路径,打开该工程中的“PrgFrame.prj”文件,即可打开整个工程。在运行界面左边的工

16、程文件列表区显示了PrgFrame的文件组织情况,可以看到该工程由头文件(GP32ASM.h、Includes.h和LED.h)、源程序文件(GeneralFun.s、LED.s、Main.s、MCUinit.s和Vectors08.s)以及其他文件(仅为 .txt类型,是工程的说明文档)组成。这些文件已在第四章分析过,这里不再详述。初始时,编辑区显示的是主程序文件(Main.s),如果要在编辑区显示其他工程文件,只需双击列表区相应的文件名即可。2编译工程选择编译菜单下的编译源程序选项,或直接单击编译下载工具栏中的编译图标(如图6-7所示),就可以完成源程序的编译。编译图6-7 编译下载工具栏

17、编译结果信息(编译成功、出错或警告等信息)将在运行界面下方的编译调试信息区显示出来,这个区域将帮助程序员定位出错点。3下载机器码现在要把编译后产生的机器码烧写到芯片中。PrgFrame工程的控制芯片是MC908GP32 MCU,所以打开教学实验箱后,第一步要检查所使用的核心板是GP32核心板。将08写入器的USB一端与PC相连(之前已装过USB驱动,现在PC是能识别该写入器的),另一端与核心板上的MON08接口相连。将核心板上的电源开关、晶振开关拨向“写入器”一侧 ,使核心板上的电源和晶振都来自写入器。点击MT-IDE编译下载工具栏上的“USB擦除/下载”按钮,弹出“通过USB下载”对话框,对

18、芯片进行擦除、写入操作;也可以在Flash操作菜单中,执行以上动作。4连接硬件对象PrgFrame工程的功能是用A口的1引脚控制小灯闪烁,所以只要用导线将A口的1引脚与扩展板上的一盏小灯相连即可。注意:普通I/O口AD,可在核心板上直接找到;而MCU的其他引脚则通过核心板与扩展板的接口,引到了扩展板上。5运行芯片中的程序有两种方法:在MT-IDE软件系统中点击运行图标,通过写入器向MCU发送运行命令,使程序开始运行。注意这时核心板上的电源开关和晶振开关还是拨在写入器一侧的。将核心板上的电源开关和晶振开关拨向“扩展板”一侧,这时核心板电源来自扩展板,晶振来自核心板自身的晶振电路。现在,要确保实验

19、箱中扩展板的电源已经连接好,此时,按动扩展板上的复位按钮,芯片中的程序就执行起来了,正如工程描述中所说,小灯在不停的闪烁。6调试程序这里介绍两种实用的调试方法:(1) 跟踪法寄存器跟踪窗口变量跟踪窗口存储器跟踪窗口图6-8 汇编工程调试界面首先,编译源程序并下载到MCU中,并保持核心板上的电源开关、晶振开关拨向“写入器”一侧。其次,将光标停留在需要设置断点的程序代码上,点击菜单栏上的调试菜单,下拉选择设置断点即可;也可以通过点击工具栏上的图标来设置断点。然后,点击菜单栏上的调试菜单,下拉选择开始调试,进入调试界面,如图6-8所示。点击菜单栏上的调试菜单,下拉选择单步步过或者单步步入,就可以逐步

20、监控程序的执行过程,也可以选择工具栏上的相应图标实现相同的操作。单步步过和单步步入的区别在于:当遇到子程序时,单步步过将子程序当作一条语句执行,不跟踪子程序的内部执行过程,单步步入则进入子程序的内部,逐条语句执行。在单步步过或者单步步入的执行过程中,可以通过观察寄存器跟踪窗口中寄存器的值的变化来判断程序是否正确执行。寄存器窗口中列出了HC08中的所有寄存器。如果想观察某个存储器单元的内容,可以在存储器跟踪窗口中输入相应的地址,键入回车后,进行观察。例如,在汇编工程中定义了如下语句:.org RAMstartAddr /RAM的起始地址为0x0040I1: . blkb 1若在调试过程中想知道当

21、前全局变量I1的值,就可以在存储器跟踪窗口中输入I1的地址0x0040,再键入回车即可。如果需要查看某一段存储区域的内容,可在下载完程序后,选择flash操作中的读取选项,读取某一范围内的存储器内容。注意:该操作不能在单步调试时进行。单步调试结束后,点击菜单栏上的“调试”菜单,下拉选择“退出调试”,也可以点击工具栏上的相应图标结束调试。(2) 程序法如果希望程序执行到某个语句就不再向下执行,可在该语句后加入“BRA .”语句。该语句的含义是使程序流无条件转向自身。这样做和使用断点调试是异曲同工的。如果想观察某个寄存器或者任意存储空间的值,可以通过串口调试实现。例如,要在执行完某个语句后,观察存

22、储单元0x8000处的值,可在该语句后添加:LDA 0x8000 /将存储单元0x8000中的值,放入寄存器AJSR SCISend1 /工程中应已包含串行通信文件,才可调用该函数当执行完以上语句,0x8000处的值就通过串口发送给PC并显示出来。7实验中常见问题与解决方法在实验过程中,会因为一些疏忽,而得不到预期的实验结果,例如,会有以下常见错误:在对芯片执行擦除写入操作时,若出现“连接失败”提示,应检查是否已经安装该USB驱动,如果已经安装,应拔出写入器的USB一端,重新插入,复位编程器。如果总是提示进入监控失败信息,这时应该检查电源晶振开关是否拨向“写入器”一侧,写入器的MON08接口是

23、否与核心板接反了。如果写入程序后,按动复位按钮,发现小灯不闪烁,可以检查核心板是否以正确的方向插在扩展板上,导线是否连在A口的1引脚上,而不是其他引脚,如果以上都正确,再检查程序中的延时是否足够的长。如果总是擦除、写入失败,应考虑写入器、芯片、核心板或是扩展板这些硬件设备是否被损坏。这时应找来一个完好的硬件系统,用部件替换法逐个检测以上硬件设备是否完好。例如,有两个硬件系统A和B。A是有故障的,B是完好的系统。先用A的写入器替换掉B的,并在B系统上实验,如果擦写失败,说明A的写入器已损坏,需要更换,如果能正常工作,再把A的芯片替换到B系统上检测。用同样的方法逐个检测A系统上的部件,直到找出所有

24、故障所在。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记录格式表示的机器

25、码文件。S记录格式是Freescale公司的十六进制目标代码文件,它将目标程序和数据以可打印的ASCII码格式表示,可直接显示和打印。目标文件由若干行S记录构成,每行S记录可以用CR/LF/NUL结尾。一行S记录由下列五部分组成:类型记录长度地 址编码/数据校验和2字节2字节2、3或4字节0n字节1字节分别说明如下:类型表示S记录的类型。共有8种记录类型S0、S1、S2、S3、S5、S6、S8、S9。它们是为了满足不同的编码、传送方式以及解码的需求。ASM08编译器只使用S1、S9两种类型构成目标文件。S1地址为2字节的代码/数据记录。S9S1记录的结束记录。该记录没有程序/数据部分。地址部分

26、可包含控制将转向的2字节地址,如果不指定,则为第一次使用的入口地址。S2地址为3字节的代码/数据记录。S8S2记录的结束记录。S3地址为4字节的代码/数据记录。S7S3记录的结束记录。S5如果有,表示文件中总共有多少个S1、S2和S3记录。记录长度表示该记录行中字符对的数目,不包括类型和记录长度。地址它可以是2个字节、3个字节或4个字节,取决于记录类型。S1记录、S9记录均是2个字节。它表示其后的编码/数据部分将要装入的存储器起始地址。编码/数据就是实际的目标程序或数据,这一部分将被下载到嵌入式的程序存储器并运行。其字节数是由“记录长度”域的实际数值减去地址长度和校验码长度得到的。校验和为1个

27、字节,它是“记录长度”、“地址”、“编码/数据”三个部分所有字节之和的反码的低8位。供装入嵌入式时校验之用。例如:S105FFFE80007D,最后的7D就是校验和,计算方法是:05+FF+FE+80+00=0282 (十六进制运算)将低字节0x82,即0B10000010,取反得到0B01111101,即0x7D。表6-1是PrgFrame工程编译后得到的S19文件,它由7行S记录构成:表6-1 PrgFrame工程的S19文件S12380009B45024094CD8039CD8060A64CCD80654502FFCD8024A641CD80654502FFCD80ECS12380202

28、4CC800B87650000270DA6C89D9D4BFCAFFF65000026F3868187A601B71EA63D99S1238040B71F3F36A601B736A601B738A62CB739A680B73AA601B73B1A361E37183686813BS11880601204120081A141260412002006A14C260213008180F1S123FFDC8074807480748074807480748074807480748074807480748074807480748074C1S107FFFC8074800089S9030000FC表6-1中第一

29、行的前两个符号S1表示这一行是S1记录,其后的“23”是十六进制数0x23,等于十进制数的35,表示在这一行中其后有35个字节的数据,包括2个字节的地址8000、32个字节的编码/数据,和最后一个校验和字节EC,大家可验证。这一行记录表示实际的编码/数据将被装入嵌入式存储器起始地址为$8000的内存中。最后一行是S9记录,S9之后的03是十六进制$03,表示其后有3个字节的数据。0000为2个字节的地址,FC是校验和。S记录是以ASCII码形式的机器码表示,一个机器码字节需要用2个ASCII码表示。若每个S记录有32个机器码字节,加上S1字头、记录长度、地址、校验码,则每条记录需要以74个字节

30、存盘,则10KB机器码的S19文件大小会有23690B之多。特别提醒:S19文件大小不是机器码的大小。2列表文件(*.lis)在Lis文件中可以对照查看汇编源程序和相应的机器码以及这些指令和数据将要放入的相对或绝对地址。如表6-1,列出了PrgFrame工程汇编后产生的列表文件main.lis的部分内容,列表文件的格式如下:地址 目标码 汇编指令“地址”是该指令目标码的首地址的十六进制值,“目标码”是与汇编指令对应的十六进制机器码字节。如下表中带阴影一行,“SEI /关总中断”是汇编源程序中的一条语句和相应的注释,9B是SEI这条指令所对应的机器码,0x8000是该机器码将被写于芯片存储器中的

31、地址。由于在汇编源程序中包含绝对定位语句“.org $XXXX”,所以表6-2中的地址是绝对地址。如果没有这种定位语句,则生成相对地址,从0x0000开始编址,就无法正确运行。表6-2 汇编产生的列表文件main.lis的部分内容 0000 /主程序 0000 /以下两条语句的详细解释见"工程说明.txt" .area flash(abs) .org FlashStartAddr 8000 MainInit: /复位后从此处执行(见Vectors08.s文件末尾处) 8000 9B SEI /关总中断 8001 /1. 堆栈初始化为RAM最高端 8001 450240 LD

32、HX #RAMendAddr + 1 /HX = #RAMEndAddr + 1 8004 94 TXS /HX - 1 -> SP 8005 /2. 系统初始化 8005 CD8039 JSR MCUinit /初学时跳过此处 8008 /3. 模块初始化 8008 CD8060 JSR LEDinit /(1) I/O口小灯控制引脚初始化 800B /程序总循环入口 800B MainLoop: 800B A64C LDA #'L' /小灯亮 800D CD8065 JSR LED_L_A 8010 4502FF LDHX #$02FF /延时 8013 CD8024

33、 JSR DelayHX 8016 A641 LDA #'A' /小灯暗 8018 CD8065 JSR LED_L_A 801B 4502FF LDHX #$02FF /延时 801E CD8024 JSR DelayHX 8021 CC800B JMP MainLoop6.2.3 新建一个汇编工程上一小节,介绍了如何打开、运行及调试一个已存在的汇编工程。如果要创建一个新的汇编工程应如何操作呢,现在,就介绍两种新建工程的方法:1拷贝新建法顾名思意,就是拷贝一个已有的工程,然后在此基础上进行修改,得到一个满足需求的新工程。例如,现在要新建一个汇编工程,完成用一个开关控制一盏灯(

34、开关打开,小灯亮;开关闭合,小灯暗)的功能。给这个工程命名为SwitchCtrl。它和第一个实例工程PrgFrame十分相似,所以可以利用PrgFrame新建SwitchCtrl。步骤如下:拷贝并重命名PrgFrame工程文件夹。在工程文件夹中修改工程文件名“PrgFrame.prj”为“SwitchCtrl.prj”。由于新工程中的控制芯片与原工程相同,所以所有的面向芯片文件(GP32ASM.h、MCUinit.s和Vectors08.s)都无须修改,直接重用。新工程根据所读取的开关输入值(0/1),驱动小灯亮、暗,是面向小灯和开关编程的。所以原工程中的小灯控制文件,应该保留,同时还应准备创

35、建面向开关的文件Switch.s和Switch.h,分别用于读取开关输入值和定义开关控制引脚。原来的通用程序文件有GeneralFun.s和Includes.h,新工程中并不需要延时所以可以删除GeneralFun.s文件,而Includes.h和主程序文件(Main.s)必须保留并做必要的改动。对原有工程在文件层上做必要的增删后,就要开始编辑新工程了。在MT-IDE软件中打开新工程中的工程文件SwitchCtrl.prj,发现并没有打开整个工程(工程列表中没有具体的程序文件),原因是在上一步中修改了工程文件名,这时要在列表中的工程文件目录上右击添加工程文件夹中已有的文件或通过文件菜单中的新建

36、选项,新建程序文件。单击文件菜单中的新建选项,出现新建对话框,选择新建文件选项卡,填入新文件的路径,文件名,文件类型,用这种方法可在工程中新建“.s”“.h”“.txt”三种类型的文件。本工程中需要新建Switch.s和Switch.h文件。在列表中可以看到所有程序文件后,双击相应文件名,就可在编辑区打开对应的程序文件,进行编辑修改了。2向导新建法打开MT-IDE软件,点击文件菜单下的新建选项,选择新建工程选项卡,填写所建工程的路径,工程名,工程类型(汇编/C),工程的控制芯片等信息,确定后,将会自动生成所需的汇编工程框架。框架中已包含所有面向芯片的程序文件和主程序文件框架,对这些文件,只须根

37、据需要稍加修改即可。另外,还要在工程中新建硬件对象的控制程序文件,和必要通用程序文件。新建文件的方法已经讨论过,这里不再详述。用以上任何一种方法新建工程,组织好文件后,就可以开始编辑,编译,调试程序了,这些操作的具体方法请参见上一小节,这里不再阐述。6.2.4 运行第一个C工程实例运行C工程的步骤也可以分成打开工程、编译工程、下载工程、连接硬件对象、运行芯片中程序和调试等。6.2.1节详细介绍了运行第一个汇编工程的具体步骤,参照这些步骤,可以运行第一个C工程实例,这里不再具体阐述,只是列出运行C工程与运行汇编工程的不同之处。(1) 编译过程产生的List文件不同C工程编译产生的List文件如表

38、6-3所示,与汇编工程不同之处在于C工程编译产生的List文件中包含了C语句以及其对应的汇编语句,并对其中的C语句加上了行号,即表6-3中所示的(0014)之类,方便阅读,C工程编译产生的List文件的阅读方法同汇编工程,这里不再阐述。表6-3 C工程编译产生的列表文件PrgFrame.lst的部分内容(0014) /主函数(0015) void main()(0016) _main: 8079 9B seI(0017) DisableMCUInt(); /禁止总中断(0018) MCUInit(); /芯片初始化 807A CD 80AB jsr _MCUInit(0019) LEDInit

39、(); /小灯控制引脚初始化 807D CD 8035 jsr _LEDInit 8080 95 tSX 8081 20 25 bra 0x80A8(0020) /程序总循环入口(0021) while (1)(0022) 8083 A6 4C ldA #76 8085 87 pshA 8086 CD 803A jsr LED_L_A 8089 A7 01 aiS #1(0023) LED_L_A('L'); /小灯亮(0024) Delay(15000); /延时 808B 45 3A98 ldHX #0x3A98 808E 89 pshX 808F 8B pshH 8090

40、 CD 804E jsr _Delay 8093 A7 02 aiS #2(0025)(0026) LED_L_A('A'); /小灯暗 8095 A6 41 ldA #65 8097 87 pshA 8098 CD 803A jsr _LED_L_A 809B A7 01 aiS #1(0027) Delay(15000); /延时 809D 45 3A98 ldHX #0x3A98 80A0 89 pshX 80A1 8B pshH 80A2 CD 804E jsr _Delay 80A5 A7 02 aiS #2 80A7 95 tSX(0028) 80A8 20 D9

41、bra 0x8083 80AA 81 rts(2) 调试方法不同C工程的调试方法也分为跟踪法和程序法两种,程序法同汇编工程,只将串行口的子程序换成相应的C函数即可。在跟踪法中,C工程的调试界面如图6-9所示。其中寄存器跟踪窗口和存储器跟踪窗口的调试方法同汇编,这里不再阐述。在变量跟踪窗口中可以输入C工程中定义的变量,在调试中,窗口中变量的值将随程序的执行而发生改变。寄存器跟踪窗口变量跟踪窗口存储器跟踪窗口图6-9 C工程调试界面*6.3 CodeWarrior软件简介CodeWarrior 是Metrowerks公司研发的专门面向Freescale所有MCU与DSP嵌入式应用开发的软件工具,是

42、Freescale向用户推荐的产品。Metrowerks公司是Motorola公司于1999年收购的、独立运作的子公司。CodeWarrior分为3个版本:特别版(Special Edition)、标准版和专业版。特别版是免费的、用于教学目的,对生成的代码量有一定限制,C代码不得超过12KB,对工程包含的文件数目限制在30个以内。标准版和专业版没有这种限制。3个版本的区别在于用户所获取的授权文件(license)不同,特别版的授权文件随安装软件附带,不需要特殊申请,标准版和专业版授权文件需要付费,同其他商业软件一样,付费前有1个月的试用期。CodeWarrior特别版、标准版和专业版的定义随所

43、支持的微处理器的不同而不同,如CodeWarrior for HC08 V3.0、CodeWarrior for HCS12X V4.1等。CodeWarrior开发工具是一个比较复杂的软件,其功能很强,以下简单介绍CodeWarrior的使用方法,使读者快速入门,更多的功能和用法请阅读该软件包中包含的大量文档,在实践中不断熟悉和掌握。本节将以CodeWarrior for HC08 V3.0说明该软件的使用方法。6.3.1 CodeWarrior的安装图6-10 安装CodeWarrior的文件夹运行安装文件夹下的“setup.exe”文件,按照安装向导就可以完成软件的安装,默认安装在“C:

44、Program FilesMetrowerksCodeWarrior CW08_V3.0”文件夹下,该文件夹下的内容如图6-10所示。“Bin”文件夹主要包含了CodeWarrior IDE环境的可执行文件“IDE.exe”,“lib”文件夹主要包含了HC08的头文件及库文件,“prog”文件夹主要包含了汇编、编译、反汇编、连接、调试及下载等可执行文件。安装完毕后要通过网络注册以申请使用许可,申请后会通过E-Mail得到一个License.dat文件,将该文件复制到安装文件夹下。对于免费的特别版本,用安装包中的License.dat覆盖安装目录下的License.dat文件,就可以使用了。6.

45、3.2 新建工程安装CodeWarrior后,在开始菜单下有IDE环境的快捷方式“CodeWarrior IDE”,执行该命令得到集成开发环境,如图6-11所示。图6-11 CodeWarrior的启动界面单击“File”菜单下的“New”命令将出现新建文件或工程的对话框,如图6-12所示,其中有三个选项:Empty Project、HC(S)08 Board Support Stationary、HC(S)08 New Project Vizard。在新建工程时,通常选择后两项中的一项。选择“HC(S)08 New Project Vizard”项,输入工程的名字“Example1”,设定工

46、程保存的路径,单击确定按钮。图6-12 新建文件或工程的对话框在接下来的新建工程向导过程中,需要选择芯片的名称、编程语言、浮点数格式、存储器模式、相连的编程调试器等选项,假如这些选项使用默认选项,最后单击“完成”,得到如图6-13所示的工程文件管理窗口,工程文件扩展名为“.mcp”。工程窗口顶端有三个标签页:“Files”、“Link Order”链接顺序和“Targets”。在这几个标签页的上方,有一个用于选择要编译的目标文件的下拉菜单。在本例中,我们选择的是适合于P&E调试器的版本。编译、链接和调试工具栏图6-13 Example1 程序的工程窗口文件标签页列出了在工程中所有可能用

47、到的文件,用户可以通过创建一些组(用文件夹图标表示)来分门别类地管理这些文件,并可以帮助你方便地了解哪些文件将被使用。在本例中,将“main.c”放到“Source”组中、08芯片初始化程序放到“Startup Code”组、将库文件放到“Libs”组中等,以便整洁明了地管理这些文件。新建工程后的这样文件是CodeWarrior自动生成的,用户可以根据需要修改这些内容以及增加自己的代码。在新建工程后,还没有编译这个工程时,每个文件对应的Code和Data栏中显示的数字都是零。一旦我们编译了这个工程,这些数字就将显示出来,表示源码转换为机器代码后实际的代码量和数据量。有些文件后面显示的是“n/a

48、”,这表示虽然这些文件被显示在这里,但是它们并不是工程目标文件的一部分,它们用于调试和下载时使用的。6.3.3 编译、链接与仿真调试Debug图6-14 Example1工程编译后的工程窗口单击“Project”菜单下的“Make”或工程工具栏的“Make”命令编译该工程,这将更新所有需要编译的文件并产生相应的输出文件。此时“Example1”工程窗口如图6-14所示。在编译、链接没有错误时,可以进行仿真调试程序。单击工程窗口工具栏的Debug按钮,会弹出图6-15所示的仿真调试界面。仿真调试界面包含了Source、Procedure、Data1、Data2、Command、Assembly、Register和Memory8个子窗口,工具栏中包含的调试按钮有:运行、单步步入、单步步过、单步步出、汇编语言的单步运行、停止、目标板复位。Source窗口即源程序窗口,在窗口中右击,弹出快捷菜单,快捷菜单中有

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论