第9章-ARM汇编语言程序设计基础(87)_第1页
第9章-ARM汇编语言程序设计基础(87)_第2页
第9章-ARM汇编语言程序设计基础(87)_第3页
第9章-ARM汇编语言程序设计基础(87)_第4页
第9章-ARM汇编语言程序设计基础(87)_第5页
已阅读5页,还剩83页未读 继续免费阅读

下载本文档

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

文档简介

1、A Free sample background from Slide 114:131ARM9ARM9嵌入式系统设计基础教程嵌入式系统设计基础教程江苏大学计算机科学与通信工程学院江苏大学计算机科学与通信工程学院通通 信信 工工 程程 系系陈祖爵陈祖爵A Free sample background from Slide 214:132第第1 1章章 嵌入式系统基础知识嵌入式系统基础知识第第2 2章章 ARM ARM体系结构体系结构第第3 3章章 32 Bit RISC32 Bit RISC微处理器微处理器S3C2410AS3C2410A第第4 4章章 嵌入式系统的存储器系统嵌入式系统的存储器系

2、统第第5 5章章 嵌入式系统输入嵌入式系统输入/ /输出设备接口输出设备接口第第6 6章章 嵌入式系统总线接口嵌入式系统总线接口第第7 7章章 嵌入式系统网络接口嵌入式系统网络接口第第8 8章章 嵌入式系统嵌入式系统第第9 9章章 ARMARM汇编语言程序设计基础汇编语言程序设计基础第第1010章章 BootloaderBootloader设计基础设计基础第第1111章章 LinuxLinux操作系统基础操作系统基础第第1212章章 嵌入式嵌入式LinuxLinux软件设计软件设计第第1313章章 图形用户接口(图形用户接口(GUIGUI)A Free sample background fr

3、om Slide 314:133第第9章章 ARM汇编语言程序设计基础汇编语言程序设计基础 9.1 ADS集成开发环境4-329.2 ARM汇编伪指令33-499.3 ARM的汇编语言结构 50-609.4 ARM汇编语言程序调试61-749.5 ARM汇编语言与C语言混合编程 75-87A Free sample background from Slide 414:1349.19.1ADSADS集成开发环境集成开发环境 ARM ARM应用软件的应用软件的开发工具开发工具根据功能的不同,可以分为根据功能的不同,可以分为编辑软编辑软件件、编译软件编译软件、汇编软件汇编软件、链接软件链接软件、调试

4、软件调试软件、嵌入式实时、嵌入式实时操作系统操作系统、函数库函数库、评估板评估板,JTAGJTAG仿真器仿真器以及以及在线仿真器在线仿真器等。等。目前有多家公司可以提供以上不同类型的开发工具,用户采用目前有多家公司可以提供以上不同类型的开发工具,用户采用ARMARM处理器进行嵌入式系统开发时,选择处理器进行嵌入式系统开发时,选择合适的开发工具合适的开发工具可以加可以加快开发快开发进度进度,节省开发,节省开发成本成本。通常将编辑软件、编译软件、汇。通常将编辑软件、编译软件、汇编软件、链接软件、调试软件、工程管理及函数库等都包含在编软件、链接软件、调试软件、工程管理及函数库等都包含在一起的一起的集

5、成开发环境集成开发环境( (IDEIDE) )较为常见,也是进行嵌入式系统开发较为常见,也是进行嵌入式系统开发时必不可少的。时必不可少的。 目前,典型的目前,典型的ARM IDEARM IDE有有STDSTD(Software Development (Software Development kiTkiT) )、ADSADS(ARM Developer Suite)(ARM Developer Suite)、MultiMulti 2000 2000、EmbestEmbest、HitoolHitool for ARMfor ARM等。等。A Free sample background fro

6、m Slide 514:1359.1.19.1.1 ADSADS工具包的组成工具包的组成 ADSADS是是ARMARM公司推出公司推出的集成开发工具包,专用于的集成开发工具包,专用于ARMARM应用开发和应用开发和调试的综合性软件。目前常用的调试的综合性软件。目前常用的版本版本是是1.21.2,在,在功能功能和和易用性易用性上上比比早期的早期的SDTSDT都有都有提高提高,是一款功能强大又易于使用的开发工具,是一款功能强大又易于使用的开发工具。ARM ADSARM ADS包含有包含有编译器编译器、链接器链接器、CodeWarrior CodeWarrior IDEIDE、调试器调试器、指令集模

7、拟器指令集模拟器、ARMARM开发包开发包和和应用库应用库等部分,可以用等部分,可以用ADSADS开发开发、编译、调试采用包括、编译、调试采用包括C C、C+C+和和ARMARM汇编语言编写的程序。汇编语言编写的程序。 1. 1.编译器编译器 ADS ADS提供多种编译器提供多种编译器, ,以支持以支持ARMARM和和ThumbThumb指令的编译指令的编译, ,包含有包含有armccarmcc(ARM C(ARM C编译器编译器) )、tcctcc(Thumb C(Thumb C编译器编译器) )、armcpparmcpp(ARM C+(ARM C+编译器编译器) )tcpptcpp(Thu

8、mb C+(Thumb C+编译器编译器) )和和armasmarmasm(ARM(ARM和和ThumbThumb汇编器汇编器).).A Free sample background from Slide 614:1362.2.链接器链接器 ArmlinkArmlink(ARMARM链接器)可以将编译得到的链接器)可以将编译得到的一个一个或或多个目标文多个目标文件件和相关的一个或多个和相关的一个或多个库文件库文件进行进行链接链接,生成生成一个一个可执行文件可执行文件,也可以将多个目标文件部分链接成一个,也可以将多个目标文件部分链接成一个目标文件目标文件,以供进一,以供进一步的链接。步的链接。

9、采用有采用有ARMARM公司的公司的源程序编辑源程序编辑、汇编汇编及及链接工具链接工具,针对,针对ARMARM系系列的每一种结构都进行了专门的优化处理,其代码生成工具最列的每一种结构都进行了专门的优化处理,其代码生成工具最终生成的可执行终生成的可执行文件最小文件最小,可以比其他公司工具套件生成的文,可以比其他公司工具套件生成的文件件小小20%20%。 A Free sample background from Slide 714:1373.3.CodeWarrior IDECodeWarrior IDE CodeWarrior IDE CodeWarrior IDE(集成开发环境集成开发环境)

10、包括)包括工程管理器工程管理器、代码代码生成接口生成接口、语法语法敏感编辑器、敏感编辑器、源文件源文件和类和类浏览器浏览器、源代码版本、源代码版本控制系统接口以及文本搜索引擎等。控制系统接口以及文本搜索引擎等。ADSADS仅在其仅在其PCPC机版本中集成机版本中集成了该了该IDEIDE。 CodeWarrior IDE CodeWarrior IDE为为管理管理和和开发项目提供开发项目提供了简单多样化的了简单多样化的图图形用户界面形用户界面,用户可以使用,用户可以使用ADSADS的的CodeWarrior IDECodeWarrior IDE为为ARMARM和和ThumbThumb处理器开发用

11、处理器开发用C C、C+C+或者或者ARMARM汇编语言编写的程序代码。汇编语言编写的程序代码。 A Free sample background from Slide 814:1384.4.调试器调试器 (1 1)调试器类型)调试器类型 ADS ADS中包含有中包含有3 3个调试器个调试器, ,分别是分别是ARMARM扩展调试器扩展调试器AXDAXD, ,向下兼容的向下兼容的ADW(ARM ADW(ARM debugger for debugger for windowswindows) )、ADUADU(ARM Debugger for (ARM Debugger for UNIXUNIX

12、) )和和ARMARM符号调试器符号调试器armsdarmsd。ArmsdArmsd是是命令调试工具命令调试工具,用于辅助调试,或者用于其他操作系统平台,用于辅助调试,或者用于其他操作系统平台上,能进行源码级的程序调试。用户可以用上,能进行源码级的程序调试。用户可以用C C语言或汇编语言编写的代码中语言或汇编语言编写的代码中进行单步调试,设置断点,查看量值和内存单元的内容。进行单步调试,设置断点,查看量值和内存单元的内容。(2 2)调试方式)调试方式 在在ARMARM体系中,可以选择体系中,可以选择Multi-ICEMulti-ICE(Multi-processorMulti-processo

13、r in-circuit in-circuit emulatoremulator)ARMulatorARMulator或或AngelAngel多种调试方式。多种调试方式。 Multi-ICEMulti-ICE是是ARMARM公司自己的公司自己的JTAGJTAG在线仿真器在线仿真器产品产品, ,不是由不是由ADSADS提供的。提供的。 ARMulatorARMulator是是ARMARM指令集模拟器指令集模拟器,集成在,集成在ARMARM调试器调试器AXDAXD中,提供对中,提供对ARMARM处理处理器的指令集的仿真,为器的指令集的仿真,为ARMARM和和ThumbThumb提供精确模拟。在硬件

14、尚未做好的情况下提供精确模拟。在硬件尚未做好的情况下,在,在PCPC机上开发程序代码,利用模拟器方式调试,实现部分调试工作。机上开发程序代码,利用模拟器方式调试,实现部分调试工作。 AngelAngel是是ARMARM常驻在常驻在目标机目标机FlashFlash中的监控程序中的监控程序,通过,通过RS-232CRS-232C与与PCPC机相连机相连,就可以在,就可以在PCPC机上对基于机上对基于ARMARM架构处理器的目标机进行监控器方式的调试。架构处理器的目标机进行监控器方式的调试。 A Free sample background from Slide 914:1395.5.ARMARM开

15、发包和函数库开发包和函数库 ARM ARM开发包由一些开发包由一些底层的例程底层的例程和和库组成库组成, ,用户可快速开发用户可快速开发ARMARM的应用程序和操作系统。的应用程序和操作系统。 ADS ADS的的ARMARM应用库完善并增强了应用库完善并增强了SDTSDT中的函数库,还包括有用中的函数库,还包括有用的源码例程。使用的源码例程。使用ARMADSARMADS开发应用程序与使用开发应用程序与使用ARM SDTARM SDT完全相同完全相同,可,可选择选择使用使用AngleAngle驻留模块或驻留模块或JTAGJTAG仿真器仿真器。目前大部分。目前大部分JTAGJTAG仿仿真器都支持真

16、器都支持ARM ADSARM ADS。 ADS ADS提供提供ANSI CANSI C函数库函数库和和C+C+函数库函数库,支持被编译的,支持被编译的C C和和C+C+代代码。用户可把码。用户可把C C函数库中的与目标相关的函数作为应用程序中的函数库中的与目标相关的函数作为应用程序中的一部分,重新进行代码的实现。在一部分,重新进行代码的实现。在C C函数库中很多函数是独立于函数库中很多函数是独立于其他函数,并与目标硬件没任何依赖关系。用户可根据应用程其他函数,并与目标硬件没任何依赖关系。用户可根据应用程序的要求,对与目标无关的序的要求,对与目标无关的库函数库函数进行进行适当适当的的裁剪裁剪和和

17、利用利用。 A Free sample background from Slide 1014:1310 TypicalTypical安装模式后的安装模式后的ADSADS工具包工具包 下图是采用下图是采用TypicalTypical安装模式后,在程序栏里看到的安装模式后,在程序栏里看到的ADSADS工具工具包包组成,其中主要就是组成,其中主要就是CodeWarriorCodeWarrior编译器编译器和和AXDAXD调试器调试器这两个这两个图形界面开发工具。图形界面开发工具。 A Free sample background from Slide 1114:13119.1.29.1.2 ADSA

18、DS开发工具集开发工具集1.1.命令行开发工具命令行开发工具 命令行开发工具在实际命令行开发工具在实际应用中相对比较广泛应用中相对比较广泛,使用它最大的好处就是可,使用它最大的好处就是可以将许多以将许多编译命令写在一个脚本文件中编译命令写在一个脚本文件中,然后只,然后只执行该脚本文件执行该脚本文件就可以让工就可以让工具自动地完成所有的编译工作命令行中常用的命令如下:具自动地完成所有的编译工作命令行中常用的命令如下:(1 1)armccarmcc: : armccarmcc是是ARM CARM C编译器编译器。编译器通过了。编译器通过了Plum Hall C Validation Plum Ha

19、ll C Validation SuiteSuite为为ANSI CANSI C的一致性测试。的一致性测试。armccarmcc将将ANSI ANSI C C编写的程序编译编写的程序编译成成3232位位ARMARM指指令代码令代码; ; 在命令控制台环境下在命令控制台环境下, ,输人命令输人命令“C:C:armccarmcc-help-help”可以可以查看查看armccarmcc的语法的语法格式以及最格式以及最常用常用的一些的一些操作选项操作选项。(2 2)armcpparmcpp: : armcpparmcpp是是ARMARM C+C+编译器编译器。它将。它将ISO C+ISO C+或或E

20、C+EC+源码编译源码编译成成3232位位ARMARM指令代码指令代码; ;(3 3)tcctcc: : tcctcc是是Thumb CThumb C编译器编译器。编译器通过了。编译器通过了Plum Hall C Validation Plum Hall C Validation SuiteSuite为为ANSIANSI一致性测试。一致性测试。tcctcc将将ANSICANSIC源代码编译源代码编译成成1616位的位的ThumbThumb指令代码指令代码。 A Free sample background from Slide 1214:1312命令行开发工具命令行开发工具(4 4)tcppt

21、cpp: : tcpptcpp是是Thumb C+Thumb C+编译器编译器。它将。它将ISO C+ISO C+或或EC+EC+源码编译源码编译成成1616位位ThumbThumb指令代码指令代码; ;armcpparmcpp、tcctcc和和tcpptcpp的命令行格式与的命令行格式与armccarmcc相同。相同。(5 5)armsmarmsm: : armsmarmsm是是ARMARM和和ThumbThumb的的汇编器汇编器. .它对用它对用ARMARM汇编语言汇编语言和和ThumbThumb汇编汇编语言语言写的源代码进行写的源代码进行汇编汇编; ;(6 6)armlinkarmlin

22、k: : armlinkarmlink是是ARMARM连接器连接器。该命令即可以将编译得到的一个或多。该命令即可以将编译得到的一个或多个个目标文件目标文件和相关的一个或多个和相关的一个或多个库文件库文件进行进行链接链接,生成一个,生成一个可执行文件可执行文件,也,也可以将多个目标文件部分链接成一个目标文件,以供进一步的链接。可以将多个目标文件部分链接成一个目标文件,以供进一步的链接。ARMARM链链接器生成的是接器生成的是ELFELF格式的可执行映像文件格式的可执行映像文件; ;(7 7)armsdarmsd: : armsdarmsd是是ARMARM和和ThumbThumb的的符号调试器符号

23、调试器。它能够进行。它能够进行源码级源码级的的程序程序调试调试。用户可以在用。用户可以在用C C语言或汇编语言写的代码中进行语言或汇编语言写的代码中进行单步调试单步调试,设置,设置断点断点,查看,查看变量变量值和值和内存内存单元的单元的内容内容。A Free sample background from Slide 1314:13132.GUI2.GUI开发环境开发环境 图形用户界面图形用户界面(graphic user interface,(graphic user interface,简称简称guigui) )的大量使用很好的方的大量使用很好的方便了非专业用户的使用。便了非专业用户的使用。

24、guigui应用程序的设计是嵌入式系统设计的一个关键应用程序的设计是嵌入式系统设计的一个关键技术,能极大地提高技术,能极大地提高人机交互人机交互的效率。的效率。 ADS GUI ADS GUI开发环境主要包含开发环境主要包含Code WarriorCode Warrior和和AXDAXD,其中,其中Code WarriorCode Warrior是用是用于于编译编译和和链接链接的的集成开发工具集成开发工具,而,而AXDAXD则是支持则是支持单步执行单步执行、断点设置断点设置等功能等功能的的集成调试工具集成调试工具。(1 1)Code WarriorCode Warrior Code Warri

25、or for ARM Code Warrior for ARM是一套完整的是一套完整的集成开发工具集成开发工具,充分发挥了,充分发挥了ARM ARM RISCRISC指令系统的优势指令系统的优势, ,可加速并简化开发过程的环节,只用集成软件开发环可加速并简化开发过程的环节,只用集成软件开发环境就能研制出境就能研制出ARMARM产品。在开发过程中无需离产品。在开发过程中无需离Code WarriorCode Warrior开发环境,可节开发环境,可节省开发时间省开发时间, ,将精力投入到代码编写上。将精力投入到代码编写上。Code Warrior IDECode Warrior IDE为管理和开

26、发项为管理和开发项目提供了简单、多样化的图形用户界面。用户可以使用目提供了简单、多样化的图形用户界面。用户可以使用ADSADS的的Code Warrior Code Warrior IDEIDE为为ARMARM处理器开发处理器开发使用使用C C、C+C+或或ARMARM汇编语言汇编语言的程序的程序代码代码。Code Warrior Code Warrior IDEIDE缩短缩短了用户了用户开发项目代码开发项目代码的的周期周期,主要基于两点,主要基于两点: :一是全面的一是全面的项目管理项目管理功功能能; ;二是二是子函数子函数的代码的代码导航功能导航功能,使得用户迅速找到程序中的子函数。,使得

27、用户迅速找到程序中的子函数。A Free sample background from Slide 1414:1314GUIGUI开发环境开发环境(2 2)AXDAXD调试器调试器 AXD AXD调试器调试器本身是一个软件,用户通过这个软件可以对包含本身是一个软件,用户通过这个软件可以对包含有调试信息的、正在运行的可执行代码进行有调试信息的、正在运行的可执行代码进行变量变量的的查看查看、断点断点的的设置设置、单步执行单步执行等调试操作。在等调试操作。在ARMARM体系中,它有体系中,它有Multi-ICEMulti-ICE、ARMulatorARMulator和和AngelAngel等几种方式

28、。等几种方式。AXDAXD可以在可以在WindowsWindows和和UNIXUNIX下下进行程序的进行程序的调试调试,它为用,它为用C C、C+C+和汇编语言的和汇编语言的源代码提供源代码提供了一了一个全面的个全面的WindowsWindows和和UNIXUNIX环境环境。A Free sample background from Slide 1514:13153.3.实用程序实用程序 ADSADS提供实用工具来配合前面介绍的提供实用工具来配合前面介绍的命令行开发工具命令行开发工具使用。使用。(1 1)fromELFfromELF是是ARMARM映像映像文件转换工具文件转换工具。该工具可以将

29、。该工具可以将ELFELF格式文件转换为各格式文件转换为各种输出格式的文件,包括种输出格式的文件,包括Plain Binary(BINPlain Binary(BIN格式映像文件格式映像文件) )、Free scale 32 Free scale 32 bit S-record format(Frees-bit S-record format(Frees-calecale 32 32位位S S格式映像文件格式映像文件) )、Intel Hex 32 Intel Hex 32 format(Intel 32format(Intel 32位格式映像文件位格式映像文件) )和和Verilog-lik

30、e hex format(VerilogVerilog-like hex format(Verilog十十六进制文件六进制文件) )。它也能够为输入映像文件产生代码和数据长度等文本信息。它也能够为输入映像文件产生代码和数据长度等文本信息。(2 2)armararmar是是ARMARM库库函数生成器函数生成器,它将一系列,它将一系列ELFELF格式的格式的目标文件目标文件以以库函数库函数的的形式集合形式集合在一起,用户可以把一个库传递给一个链接器,以代替几个在一起,用户可以把一个库传递给一个链接器,以代替几个ELFELF文文件。这个工具可用于开发库文件,以提供给应用程序员做二次开发。件。这个工具

31、可用于开发库文件,以提供给应用程序员做二次开发。(3 3)FlashFlash downloaderdownloader用于把二进制映像文件用于把二进制映像文件下载下载到到ARMARM嵌入式设备上嵌入式设备上的的 FlashFlash存储器中。存储器中。A Free sample background from Slide 1614:13169.1.39.1.3 CodeCode WarriorWarrior IDEIDE的创建的创建 Code Warrior IDE Code Warrior IDE提供提供了一个简单的了一个简单的图形化用户界面图形化用户界面用于用于管理软件项目管理软件项目,

32、支持,支持C C、C+C+和和ARMARM的开发。通过的开发。通过实例实例讲述讲述Code Warrior IDECode Warrior IDE的的具体使用具体使用。1.1.创建项目工程创建项目工程(1 1)新建工程)新建工程 “开始开始”菜单中选择菜单中选择ARM Developer Suite v1.2ARM Developer Suite v1.2Code Warrior for Code Warrior for ARM ARM DevelopeDevelope:SuiteSuite,运行运行ADS1.2ADS1.2集成开发环境集成开发环境( (Code Warrior for ARM

33、 Code Warrior for ARM Developer Suite)Developer Suite),选择选择FileFileNewNew项,在项,在NewNew对话框中,选择对话框中,选择ProjectProject选项选项卡,卡,ARM Executable ARM Executable lmagelmage,在在Project nameProject name文本框中输入项目的名称,在文本框中输入项目的名称,在LocationLocation中输入其存放的位置中输入其存放的位置( (见图见图9.1.2)9.1.2)。 注意:注意:ADSl.2ADSl.2不支持中文的目录名字,所以

34、新建工程的文件夹向上一直不支持中文的目录名字,所以新建工程的文件夹向上一直到根目录的所有文件夹的名字都要英文。到根目录的所有文件夹的名字都要英文。 A Free sample background from Slide 1714:1317新建工程新建工程 在新建工程对话框中为用户提供了在新建工程对话框中为用户提供了7 7种可选择的工程类型:种可选择的工程类型: (1) (1)ARM Executable lmage ARM Executable lmage 由由ARMARM指令代码生成指令代码生成ELFELF格式可执行映像文件。格式可执行映像文件。 (2) (2)ARM Object Libr

35、ary ARM Object Library 由由ARMARM指令的代码生成指令的代码生成armararmar格式的目标文件库。格式的目标文件库。 (3) (3)Empty Project Empty Project 用于创建一个不包含任何库或源文件的工程。用于创建一个不包含任何库或源文件的工程。 (4) (4)Makefile lmporter WizardMakefile lmporter Wizard将将Visual CVisual C语言的语言的nmakenmake或或GNU makeGNU make文件转文件转入到入到Code Warrior IDECode Warrior IDE工

36、程文件。工程文件。 (5) (5)Thumb ARM Interworking lmageThumb ARM Interworking lmage用于由用于由ARMARM指令和指令和ThumbThumb指令的混和代码指令的混和代码生成一个可执行的生成一个可执行的ELFELF格式的映像文件。格式的映像文件。 (6) (6)Thumb Executable Image Thumb Executable Image 由由ThumbThumb指令创建一个指令创建一个ELFELF格式的映像文件。格式的映像文件。 (7) (7)Thumb Object LibraryThumb Object Librar

37、y由由ThumbThumb指令代码生成指令代码生成armararmar格式的目标文件库。格式的目标文件库。 A Free sample background from Slide 1814:1318(2)(2)选择选择DebugDebug版本版本 在新建的工程中在新建的工程中, ,选择选择DebugDebug版本,生成目录选项版本,生成目录选项 每个工程目录都有每个工程目录都有3 3种种生成目标生成目标: Debug Debug 包含包含所有所有的的调试信息调试信息。 DebugRel DebugRel 包含包含部分部分调试调试信息信息。 Release Release 不包含不包含调试调试信

38、息信息的发行版本。的发行版本。 A Free sample background from Slide 1914:1319(3)Post-Linker(3)Post-Linker选项选项 从从EditEdit下拉菜单中选择下拉菜单中选择Debug SettingDebug Setting,弹出图所示对话框,选中,弹出图所示对话框,选中Target Target SettingsSettings项,在项,在Post-linkerPost-linker列表框中选中列表框中选中ARM fromELFARM fromELF项,单击项,单击OKOK按钮。这按钮。这是为是为生成可执行的代码生成可执行的代码

39、的的初始开关初始开关。A Free sample background from Slide 2014:1320(4) (4) 选择要编译的选择要编译的CPUCPU核核 如下图所示,单击如下图所示,单击ARM AssemblerARM Assembler,在,在Architecture or ProcessorArchitecture or Processor列表列表框中框中选择选择要编译的要编译的CPUCPU核。此处以核。此处以ARM920TARM920T为例。为例。A Free sample background from Slide 2114:1321ARM C CompilerARM

40、C Compiler选项选项 如下图,单击如下图,单击ARM C CompilerARM C Compiler,在,在Architecture or ProcessorArchitecture or Processor列表框中列表框中选择选择ARM920TARM920T。这是要。这是要编译的编译的CPUCPU核核。A Free sample background from Slide 2214:1322(5)(5)设定起始地址设定起始地址 如下图,单击如下图,单击ARMLinkerARMLinker,在,在OutputOutput选项卡中选项卡中设定程序的代码段地址设定程序的代码段地址,以,以

41、及及数据使用的地址数据使用的地址。在图。在图9.1.79.1.7中的中的ROBaseROBase文本框中填写文本框中填写程序代码程序代码存放的起存放的起始始地址地址,一般为,一般为FlashFlash的起始地址;的起始地址;RW BaseRW Base文本框中填写文本框中填写数据存放数据存放的起始地的起始地址,一般为址,一般为SDRAMSDRAM的起始地址。的起始地址。A Free sample background from Slide 2314:1323(6)(6)设置设置ARM from ELFARM from ELF选项选项 如下图,即在如下图,即在Debug SettingsDebu

42、g Settings对话框中单击左栏的对话框中单击左栏的ARM from ELFARM from ELF项,在项,在Out-put file nameOut-put file name框中设置框中设置输出文件名输出文件名* *.bin.bin,前缀名可以自己取;在,前缀名可以自己取;在Output formatOutput format列表框中选择列表框中选择Plain binaryPlain binary,这是设置要下载到,这是设置要下载到F1ashF1ash中的中的二二进制文件进制文件。下图选择的是。下图选择的是test.bintest.bin。A Free sample backgrou

43、nd from Slide 2414:1324(7)(7)保存新建的项目文件保存新建的项目文件 ADSl.2ADSl.2中的基本设置中的基本设置完成后完成后,可以将该新建的空项目文件作,可以将该新建的空项目文件作为为模板保存模板保存。首先,要将该项目工程文件改一个。首先,要将该项目工程文件改一个合适的名字合适的名字,如如S3C2410 ARM.mcpS3C2410 ARM.mcp等;然后,在等;然后,在ADSl.2ADSl.2软件安装的目录下的软件安装的目录下的StationaryStationary目录下目录下新建新建一个合适的一个合适的模板目录名模板目录名,如,如S3C2410 ARM S

44、3C2410 ARM Executable lmageExecutable lmage;再将刚刚设置完的;再将刚刚设置完的S3C2410 ARM.mcpS3C2410 ARM.mcp项目文项目文件件存放存放到该到该目录下目录下即可。这样,就能在图即可。这样,就能在图9.1.89.1.8中看到该模板。中看到该模板。接下来就可以编写接下来就可以编写C C语言或者汇编语言程序语言或者汇编语言程序( (后缀为后缀为.s).s),并添加,并添加到这个工程中来。到这个工程中来。A Free sample background from Slide 2514:13252.2.对工程进行编译和链接对工程进行编

45、译和链接 对前面创建的工程进行编译、链接。可以打开对前面创建的工程进行编译、链接。可以打开ADSADS自带的自带的ExampleExample进行学进行学习习,例如打开示例,例如打开示例C:Program FilesARMADSvl_2ExamplesasmC:Program FilesARMADSvl_2Examplesasm下的下的armex.mcparmex.mcp工程文件,如下图。工程文件,如下图。A Free sample background from Slide 2614:1326对工程进行编译和链接对工程进行编译和链接 选择菜单选择菜单ProjectMakeProjectMak

46、e项对工程进行项对工程进行编译编译和和链接链接,MakeMake的行为包括以下的行为包括以下过程过程: 编译编译和和汇编源程序汇编源程序文件,文件,产生产生* *. .o o对象文件;对象文件; 链接链接对象文件和库产生对象文件和库产生可执行映像文件可执行映像文件; 产生产生二进制代码二进制代码。 Make Make之后将弹出之后将弹出Errors & WarningsErrors & Warnings对话框,对话框,报告出错报告出错和和警告情况警告情况。编译。编译成功后的显示如图成功后的显示如图9.1.109.1.10所示。所示。 注意:左上方表示的错误和警告数目都是注意:左上方表示的错误和

47、警告数目都是0 0。A Free sample background from Slide 2714:1327编译和链接后的结果编译和链接后的结果 MakeMake结束后产生了结束后产生了可执行映像文件可执行映像文件( (axfaxf文件文件) )。这个文件可以载人。这个文件可以载人AXDAXD进进行行仿真调试仿真调试,也可以采用,也可以采用fromELFfromELF工具将其转换为工具将其转换为二进制格式二进制格式文件,以文件,以烧录烧录到嵌人式设备的到嵌人式设备的FlashROMFlashROM中,或者中,或者下载下载到嵌入式设备的内存中到嵌入式设备的内存中调试运行调试运行。 A Free

48、 sample background from Slide 2814:13289.1.49.1.4 AXDAXD调试器的使用调试器的使用 AXDAXD是是ADSADS套件中的套件中的IDEIDE调试器调试器,打开,打开AXDAXD软件,默认打开的目软件,默认打开的目标是标是ARMulatorARMulator方式。这里以方式。这里以ARMulatorARMulator模拟器模拟器方式方式为例为例,介绍,介绍在在AXDAXD中进行中进行代码调试代码调试的的方法方法和和过程过程。 1.1.启动启动AXDAXD,配置配置CPUCPU环境环境 有有两种方式两种方式可以可以启动启动AXDAXD:一种是在

49、一种是在Code WarriorCode Warrior中编译、中编译、链接成功后,选择链接成功后,选择ProjectProject菜单菜单下的下的DebugDebug就可以自动启动就可以自动启动AXDAXD,并同时会将并同时会将axfaxf映像文件映像文件装载装载到到模拟器模拟器中;另一种方式就是从中;另一种方式就是从“开始开始”菜单中单击菜单中单击AXD AXD DebuggerDebugger项启动项启动。 A Free sample background from Slide 2914:13292.2.装入映像文件装入映像文件 在菜单在菜单FileFile中选择中选择Load lmag

50、eLoad lmage选项,打开选项,打开Load lmageLoad lmage对话框对话框,找到要,找到要装载装载的的axfaxf映像文件映像文件,单击,单击“打开打开”按钮,把映像文件按钮,把映像文件装载到目标内存中。在映像文件中有个蓝色的箭头指示当前执装载到目标内存中。在映像文件中有个蓝色的箭头指示当前执行的位置。比如对于行的位置。比如对于armex.mcparmex.mcp,打开映像文件后的界面如下图打开映像文件后的界面如下图。A Free sample background from Slide 3014:1330装入映像文件装入映像文件 如果不能自动装载映像文件,窗口是空白的,则

51、说明在如果不能自动装载映像文件,窗口是空白的,则说明在AXDAXD软软件中还没件中还没加载加载CPUCPU内核内核,需,需手动手动将将CPUCPU内核加载。选择菜单项内核加载。选择菜单项OptionConfigure TargetOptionConfigure Target,对调试目标进行对调试目标进行配置配置,如图,如图9.1.129.1.12所示。所示。 从图从图9.1.129.1.12可看出,这里的软件模拟器用的是可看出,这里的软件模拟器用的是ARMUL.dllARMUL.dll驱驱动程序。选择动程序。选择ConfigureConfigure,弹出弹出ARMulator Configur

52、ationARMulator Configuration对话对话框,如图框,如图9.1.139.1.13所示。在此对话框加入目标所示。在此对话框加入目标CPUCPU内核,并且选择内核,并且选择数据存储模式数据存储模式( (小端模式或大端模式小端模式或大端模式) )。 配置结束,再通过配置结束,再通过FileLoad lmageFileLoad lmage命令装入命令装入AXDAXD映像文件映像文件即可。即可。A Free sample background from Slide 3114:13313.3.程序的调试程序的调试 通过菜单通过菜单ExcuteExcute来进行来进行单步单步执行、执

53、行、断点断点设置等操作,也可以设置等操作,也可以通过菜单通过菜单Processor ViewsProcessor Views来来观测观测CPUCPU的的寄存器寄存器、程序中的、程序中的变量变量、内存内存等值变换情况。等值变换情况。A Free sample background from Slide 3214:1332 ARMulator ConfigurationARMulator Configuration对话框对话框 A Free sample background from Slide 3314:13339.29.2 ARMARM汇编伪指令汇编伪指令 9.2.19.2.1 数据常量定义

54、伪指令数据常量定义伪指令9.2.29.2.2 数据变量定义伪指令数据变量定义伪指令9.2.39.2.3 内存分配伪指令内存分配伪指令9.2.49.2.4 汇编控制伪指令汇编控制伪指令9.2.59.2.5 其他常用的伪指令其他常用的伪指令A Free sample background from Slide 3414:1334ARMARM汇编伪指令汇编伪指令 在在ARMARM汇编语言程序里,有一些汇编语言程序里,有一些特殊指令助记符特殊指令助记符,这些助记,这些助记符与指令系统的助记符不同,符与指令系统的助记符不同,没有没有相对应的相对应的操作码操作码,也就是,也就是不不会会生成机器码生成机器码

55、,仅仅是在编译器软件中起着,仅仅是在编译器软件中起着格式化格式化的的作用作用,通,通常称这些特殊指令助记符为伪指令。伪指令在源程序中的作用常称这些特殊指令助记符为伪指令。伪指令在源程序中的作用是为是为完成汇编程序完成汇编程序作各种作各种准备工作准备工作的,这些伪指令仅在的,这些伪指令仅在汇编过汇编过程中起作用程中起作用,一旦汇编结束,伪指令的使命就完成。,一旦汇编结束,伪指令的使命就完成。 在在ARMARM的汇编程序中,有如下几种伪指令:的汇编程序中,有如下几种伪指令:数据常量定义数据常量定义伪伪指令、指令、数据变量定义数据变量定义伪指令、伪指令、内存分配内存分配伪指令伪指令及其他伪指令及其他

56、伪指令。A Free sample background from Slide 3514:13359.2.19.2.1 数据常量定义伪指令数据常量定义伪指令 数据常量定义伪指令数据常量定义伪指令EQUEQU用于为程序中的常量、标号等定义用于为程序中的常量、标号等定义一个一个等效的字符名称等效的字符名称,类似于,类似于C C语言中的语言中的#define#define。 EQUEQU语法格式语法格式:名称:名称 EQU EQU 表达式表达式 ,类型,类型 ;其中;其中EQUEQU可可用用“* *”代替。代替。 EQUEQU伪指令定义的字符名称,当表达式为伪指令定义的字符名称,当表达式为3232位

57、常量时位常量时, ,可指定可指定表达式的数据类型表达式的数据类型, ,有三种有三种类型类型:CODE16CODE16、CODE32CODE32和和DATADATA 。示例:示例:Data_in EQU 100 Data_in EQU 100 ;定义标号定义标号Data_inData_in的值为的值为100100Addr EQU 0 xff,CODE32;Addr EQU 0 xff,CODE32;定义定义AddrAddr值为值为0 0 xff,xff,3232位的位的ARMARM指令指令A Free sample background from Slide 3614:13369.2.29.2.

58、2 数据变量定义伪指令数据变量定义伪指令 数据变量定义伪指令用于数据变量定义伪指令用于定义定义ARMARM汇编程序汇编程序中的中的变量变量、对变量赋值以及、对变量赋值以及定义寄存器的别名等操作。常见的数据变量定义伪指令有如下几种:定义寄存器的别名等操作。常见的数据变量定义伪指令有如下几种: (1 1)GBLAGBLA、GBLLGBLL和和GBLSGBLS 语法格式:语法格式:GBLA GBLA ( GBLL GBLL 或或 GBLS GBLS ) 全局变量名全局变量名 GBLAGBLA、GBLLGBLL和和GBLS GBLS 伪指令用于定义全局变量伪指令用于定义全局变量, ,并将其初始化。其中

59、:并将其初始化。其中: GBLAGBLA用于定义一个用于定义一个全局的数字变量全局的数字变量,并初始化为,并初始化为 0 0 ; GBLLGBLL用于定义一个用于定义一个全局的逻辑变量全局的逻辑变量,并初始化,并初始化F F(假);(假); GBLSGBLS用于定义一个用于定义一个全局的字符串变量全局的字符串变量,并初始化为空;,并初始化为空; 以上以上3 3条伪指令用于定义全局变量条伪指令用于定义全局变量, ,在整个程序范围内变量名必须唯一。在整个程序范围内变量名必须唯一。 示例:示例: GBLA Test1 GBLA Test1 ;定义一个全局的数字变量,变量名为;定义一个全局的数字变量,

60、变量名为Test1Test1 GBLL Test2 GBLL Test2 ;定义一个全局的逻辑变量,变量名为;定义一个全局的逻辑变量,变量名为Test2Test2 GBLS Test3 GBLS Test3 ;定义一个全局的字符串变量,变量名为;定义一个全局的字符串变量,变量名为Test3Test3A Free sample background from Slide 3714:1337(2 2)LCLALCLA、LCLLLCLL和和LCLSLCLS 语法格式:语法格式: LCLA LCLA(LCLLLCLL或或LCLSLCLS) 局部变量名局部变量名 LCLA LCLA、LCLLLCLL和和

温馨提示

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

评论

0/150

提交评论