ARM嵌入式系统软件设计_第1页
ARM嵌入式系统软件设计_第2页
ARM嵌入式系统软件设计_第3页
ARM嵌入式系统软件设计_第4页
ARM嵌入式系统软件设计_第5页
已阅读5页,还剩212页未读 继续免费阅读

下载本文档

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

文档简介

1、2021-11-11第五章第五章 ARMARM嵌入式系统软件设计嵌入式系统软件设计 2021-11-11 要求熟悉嵌入式系统开发的硬件与软件环境;要求熟悉嵌入式系统开发的硬件与软件环境; 掌握掌握ADSADS与与AXDAXD开发工具的使用方法;开发工具的使用方法;了解了解ARMARM的启动过程分析的启动过程分析; ; 理解存储映射的机制理解存储映射的机制; ; 熟悉与掌握嵌入式软件开发的一些常用技术熟悉与掌握嵌入式软件开发的一些常用技术2021-11-11.1 .1 开发平台开发平台 学习嵌入式技术,必须要有硬件平台作实践,学习嵌入式技术,必须要有硬件平台作实践,它不象其它的基础理论课,学懂理

2、论就行了,而它它不象其它的基础理论课,学懂理论就行了,而它主要在于实践应用,没有在硬件平台上实践是很难主要在于实践应用,没有在硬件平台上实践是很难学好嵌入式技术的。有了硬件平台,就可以开始从学好嵌入式技术的。有了硬件平台,就可以开始从理论到实践交替进行。理论到实践交替进行。 给初学者一些快速入门的方给初学者一些快速入门的方法:法:2021-11-11)从宏观上了解嵌入式系统的结构,要实现的)从宏观上了解嵌入式系统的结构,要实现的功能;功能;)利用一块成熟的开发板,这里成熟的开发板)利用一块成熟的开发板,这里成熟的开发板是指硬件资源丰富,运行稳定可靠,配套的学习是指硬件资源丰富,运行稳定可靠,配

3、套的学习资料齐全(硬件与软件开发工具以及实例);资料齐全(硬件与软件开发工具以及实例);)熟悉开发板的主要功能;)熟悉开发板的主要功能;)在没有操作系统的情况下,按模块学习)在没有操作系统的情况下,按模块学习 2021-11-11 如:如:I/OI/O口应用的口应用的LEDLED实验、定时器实验、中断实验、定时器实验、中断实验等,实验等, 在学习的过程中,首先是读懂该模块的硬件在学习的过程中,首先是读懂该模块的硬件功能,从电路图开始读懂再对应到该板卡的实际功能,从电路图开始读懂再对应到该板卡的实际实物上。一个一个模块搞懂,在学习模块时要注实物上。一个一个模块搞懂,在学习模块时要注意将硬件电路与

4、配置寄存器相结合,真正了解它意将硬件电路与配置寄存器相结合,真正了解它们的含义,最后变成程序代码。们的含义,最后变成程序代码。2021-11-115) 5) 当模块学习到一定数量后,要将它们组成一个当模块学习到一定数量后,要将它们组成一个小系统进行联调。在嵌入式系统里用得最多的编程小系统进行联调。在嵌入式系统里用得最多的编程语言就是语言就是C C语言。汇编语言主要用在系统的初始化语言。汇编语言主要用在系统的初始化部分。部分。6) 6) 熟悉硬件后,为了开发出实用的嵌入式系统,熟悉硬件后,为了开发出实用的嵌入式系统,一般是在操作系统上进行开发的。所以要熟悉一般是在操作系统上进行开发的。所以要熟悉

5、uc/osuc/os、linuxlinux和和wincewince等操作系统。等操作系统。 2021-11-111.1.硬件开发环境硬件开发环境 下面以基于下面以基于ARM9ARM9内核的内核的s3c2410s3c2410的开发板的开发板为例,说明初学者要进行入门学习需要具备的一为例,说明初学者要进行入门学习需要具备的一些开发条件:些开发条件:(1 1)基于)基于ARM9ARM9内核的内核的s3c2410s3c2410的开发板一套的开发板一套 (2 2)常用的软件开发工具)常用的软件开发工具 (3 3)常用电子测试仪表,如万用表、示波器等)常用电子测试仪表,如万用表、示波器等2021-11-1

6、1 MY-2410-1开发板基于三星公司的开发板基于三星公司的ARM处理器处理器S3C2410。是编者自主研制的一款。是编者自主研制的一款ARM9实验开发板。实验开发板。MY-2410 开发板的实物与功能示意如下图所示。开发板的实物与功能示意如下图所示。2021-11-112021-11-112021-11-112021-11-11 开发板与开发板与PCPC机的连线如下图所示。下面分别机的连线如下图所示。下面分别介绍这些接口的主要作用。介绍这些接口的主要作用。2021-11-111 1)JTAGJTAG接口接口 一般用来下载一般用来下载BootloaderBootloader。下载速度较慢。主

7、要。下载速度较慢。主要完成:完成:(1 1)初始化)初始化CPUCPU内部所有寄存器;内部所有寄存器;(2 2)加载串口驱动;)加载串口驱动;(3 3)加载)加载USBUSB驱动;驱动;(4 4)加载网卡驱动。)加载网卡驱动。2021-11-11 在进行嵌入式系统开发时,首先用到的接口就在进行嵌入式系统开发时,首先用到的接口就是是JTAGJTAG接口,利用该接口对接口,利用该接口对S3C2410XS3C2410X等开发板,等开发板,配合配合sjf2410.exesjf2410.exe烧写监控程序,如烧写监控程序,如2410mons.bin2410mons.bin监控程序。监控程序。 在以后的开

8、发中,用该接口进行调试。在以后的开发中,用该接口进行调试。2021-11-112 2)USBUSB接口接口 利用开发板上的利用开发板上的USB_DEVICEUSB_DEVICE接口,一般接口,一般用来配合用来配合DNW.exeDNW.exe来下载文件。来下载文件。 下载速度较快。开发板上的下载速度较快。开发板上的USB_HOSTUSB_HOST可以可以外接应用设备,如:外接应用设备,如:USBUSB移动硬盘,移动硬盘,USBUSB摄像摄像头等外设。头等外设。2021-11-113 3)串口)串口 串口一般配合串口一般配合DNW.exeDNW.exe或超级终端来监控或超级终端来监控板子的运行情况

9、,有时也可以用来下载文件。板子的运行情况,有时也可以用来下载文件。很多情况下主要用来调试,调试很方便,只需很多情况下主要用来调试,调试很方便,只需往串口寄存器中填数据,就可以输出调试信息。往串口寄存器中填数据,就可以输出调试信息。 4 4)网口)网口 网口用来下载数据,也完成网络通信。网口用来下载数据,也完成网络通信。2021-11-112.2. 软件开发环境软件开发环境)交叉开发概念)交叉开发概念 由于嵌入式系统硬件上的特殊性,一般不能安由于嵌入式系统硬件上的特殊性,一般不能安装装windowswindows操作系统和发行版的操作系统和发行版的linuxlinux系统,因为系统,因为它的它的

10、CPUCPU运行速度,运行速度,FLASHFLASH的空间等都达不到通的空间等都达不到通用用PCPC系统的要求。所以在嵌入式系统上无法构建系统的要求。所以在嵌入式系统上无法构建其自己的开发环境,于是,人们采用了所谓的交叉其自己的开发环境,于是,人们采用了所谓的交叉开发模式。开发模式。 2021-11-11 交叉开发就是指在一台通用计算机上进行软件交叉开发就是指在一台通用计算机上进行软件的编辑编译,然后下载到嵌入式设备中进行运行调的编辑编译,然后下载到嵌入式设备中进行运行调试的开发方式。试的开发方式。 用来开发的通用计算机可以是用来开发的通用计算机可以是PCPC机、工作站机、工作站等,等,运行通

11、用的运行通用的WindowsWindows或或LinuxLinux操作系统。开发计算操作系统。开发计算机一般称宿主机,嵌入式设备称目标机。在宿主机机一般称宿主机,嵌入式设备称目标机。在宿主机上编译好程序,下载到目标机上运行,交叉开发环上编译好程序,下载到目标机上运行,交叉开发环境提供调试工具对目标机上运行的程序进行调试。境提供调试工具对目标机上运行的程序进行调试。2021-11-11交叉编译交叉编译是指在宿主机是指在宿主机X86X86系统系统CPUCPU的通的通用计算机上使用用计算机上使用ADSADS,GCCGCC等交叉开发软件为等交叉开发软件为目标机开发程序,最后编译成可以在目标机开发程序,

12、最后编译成可以在ARMARM体系体系结构的目标机上运行目标代码。宿主机与目标结构的目标机上运行目标代码。宿主机与目标机的连接关系如下图所示。机的连接关系如下图所示。 2021-11-11 在宿主机上编译好目标代码后,通过宿主机到在宿主机上编译好目标代码后,通过宿主机到目标机的调试通道将代码下载到目标机,然后由运目标机的调试通道将代码下载到目标机,然后由运行于宿主机的调试软件控制代码在目标机上进行调行于宿主机的调试软件控制代码在目标机上进行调试。为了方便调试开发,交叉开发软件一般为一个试。为了方便调试开发,交叉开发软件一般为一个整合编辑、编译汇编链接、调试、工程管理及函数整合编辑、编译汇编链接、

13、调试、工程管理及函数库等功能模块的集成开发环境库等功能模块的集成开发环境IDEIDE(Integrated Integrated Development EnvironmentDevelopment Environment),如),如ADSADS就是一个就是一个比较好的比较好的ARMARM开发开发IDEIDE。 2021-11-11 嵌入式系统开发的使用的主要工具之间的嵌入式系统开发的使用的主要工具之间的关系,如下图所示。开发工具分为不基于操作关系,如下图所示。开发工具分为不基于操作系统与基于操作系统两大块。系统与基于操作系统两大块。 在不基于操作系统的开发中,主要用到的在不基于操作系统的开发

14、中,主要用到的是是ADSADS集成开发环境,与集成开发环境,与IAR IAR 公司的公司的IAR IAR EWARMEWARM开发软件以及一些监控与引导程序程开发软件以及一些监控与引导程序程序。序。2021-11-112021-11-112. ADS2. ADS组成介绍组成介绍 ADSADS全称为全称为ARM Developer SuiteARM Developer Suite,是,是ARMARM公司推出的新一代公司推出的新一代ARMARM集成开发工具。集成开发工具。现在现在ADSADS的最新版本是的最新版本是1.21.2,它取代了早期的,它取代了早期的ADS1.1ADS1.1和和ADS1.0

15、ADS1.0,该版本支持包括,该版本支持包括WindowsWindows和和LinuxLinux在内的多种操作系统。在内的多种操作系统。2021-11-111 1)ADSADS组成介绍组成介绍(1 1)编译器)编译器ADSADS提供多种编译器,以支持提供多种编译器,以支持ARMARM和和ThumbThumb指令的指令的编译。编译。 armccarmcc是是ARM CARM C编译器;编译器; tcctcc是是Thumb CThumb C编译器;编译器; armcpparmcpp是是ARM C+ARM C+编译器;编译器; tcpptcpp是是Thumb C+Thumb C+编译器;编译器; a

16、rmasmarmasm是是ARMARM和和ThumbThumb的汇编器。的汇编器。2021-11-11(2 2)链接器)链接器 armlinkarmlink是是ARMARM链接器。该命令既可以将编链接器。该命令既可以将编译得到的一个或多个目标文件和相关的一个或多译得到的一个或多个目标文件和相关的一个或多个库文件进行链接,生成一个可执行文件,也可个库文件进行链接,生成一个可执行文件,也可以将多个目标文件部分链接成一个目标文件,以以将多个目标文件部分链接成一个目标文件,以供进一步的链接。供进一步的链接。2021-11-11(3 3)符号调试器)符号调试器 armsdarmsd是是ARMARM和和T

17、humbThumb的符号调试器。它能的符号调试器。它能够进行源码级的程序调试。用户可以在用够进行源码级的程序调试。用户可以在用C C或汇编或汇编语言写的代码中进行单步调试、设置断点、查看变语言写的代码中进行单步调试、设置断点、查看变量值和内存单元的内容。量值和内存单元的内容。2021-11-11(4 4)fromELFfromELF 将将ELFELF格式的文件转换为各种格式的输出文格式的文件转换为各种格式的输出文件,包括件,包括BINBIN格式映像文件、格式映像文件、Motorola 32Motorola 32位位S S格式映像文件、格式映像文件、Intel 32Intel 32位格式映像文件

18、和位格式映像文件和Verilog 16Verilog 16进制文件。进制文件。FromELFFromELF命令也能够为命令也能够为输入映像文件产生文本信息,例如,代码和数据输入映像文件产生文本信息,例如,代码和数据长度。长度。2021-11-11(5 5)armararmar armararmar是是ARMARM库函数生成器,它将一系列库函数生成器,它将一系列ELFELF格式的目标文件以库函数的形式集合在一起。格式的目标文件以库函数的形式集合在一起。用户可以把一个库传递给一个链接器以代替几个用户可以把一个库传递给一个链接器以代替几个ELFELF文件。文件。 2021-11-11(6 6)Cod

19、eWarriorCodeWarriorCodeWarriorCodeWarrior集成开发环境(集成开发环境(IDEIDE)为管理)为管理和开发项目提供了简单多样化的图形用户界面,和开发项目提供了简单多样化的图形用户界面,用户可以使用用户可以使用ADSADS的的CodeWarrior IDECodeWarrior IDE为为ARMARM和和ThumbThumb处理器开发用处理器开发用C C、C+C+或者或者ARMARM汇编语汇编语言编写的程序代码。言编写的程序代码。2021-11-11(7 7)调试器)调试器 ADSADS中包含有中包含有3 3个调试器:第一个是个调试器:第一个是AXD(ARM

20、 eXtended Debugger)AXD(ARM eXtended Debugger),它是,它是ARMARM扩扩展调试器;第二个是展调试器;第二个是armsd(ARM Symbolic armsd(ARM Symbolic Debugger)Debugger),它是,它是ARM ARM 符号调试器;符号调试器; 与老版本与老版本兼容的兼容的Windows Windows 或或Unix Unix 下的下的 ARM ARM 调试工具调试工具ADW/ADUADW/ADU。2021-11-11(8 8)C C和和C+C+库库 ADSADS提供提供ANSI CANSI C库函数和库函数和C+C+库

21、函数,支持库函数,支持被编译的被编译的C C和和C+C+代码。用户可以把代码。用户可以把C C库中的与库中的与目标相关的函数作为自己应用程序中的一部分,目标相关的函数作为自己应用程序中的一部分,重新进行代码的实现。重新进行代码的实现。 针对自己的应用程序的要求,对与目标无关针对自己的应用程序的要求,对与目标无关的库函数进行适当的裁剪。在的库函数进行适当的裁剪。在C C库中有很多函数库中有很多函数是独立于其他函数的,并且与目标硬件没有任何是独立于其他函数的,并且与目标硬件没有任何依赖关系。对于这类函数,用户可以很容易地从依赖关系。对于这类函数,用户可以很容易地从汇编代码中使用。汇编代码中使用。2

22、021-11-113 3. .编写应用程序都要用到的文件编写应用程序都要用到的文件 利用下面的文件与程序,它们可以提高编程利用下面的文件与程序,它们可以提高编程效率,节省时间,也使初学者能够尽快入门。达效率,节省时间,也使初学者能够尽快入门。达到一定水平后,自己再在此文件与程序的基础上到一定水平后,自己再在此文件与程序的基础上修改,或重新编写自己的应用程序,尽可能地达修改,或重新编写自己的应用程序,尽可能地达到系统最优化的目的。到系统最优化的目的。2021-11-111)INC目录下的文件目录下的文件 2410addr.h2410addr.inc2410lib.h2410slib.hDef.h

23、Memcfg.incOption.incUart0.hmmu.hOption.h2021-11-112)INC目录下的文件说明目录下的文件说明(1)Def.h 基本数据类型重定义头文件,在定义数据类型时尽量基本数据类型重定义头文件,在定义数据类型时尽量使用使用U32,U16,S32,S16,U8,S8U32,U16,S32,S16,U8,S8等类型,以增强程序的可等类型,以增强程序的可移植性,主要内容如下:移植性,主要内容如下:#ifndef _DEF_H_#ifndef _DEF_H_#define _DEF_H_#define _DEF_H_;防止重复定义;防止重复定义_DEF_H_DEF

24、_H_#define U32 unsigned int#define U32 unsigned int#define U16 unsigned short#define U16 unsigned short#define S32 int#define S32 int#define S16 short int#define S16 short int#define U8 unsigned char#define U8 unsigned char#define#defineS8 charS8 char#define TRUE #define TRUE 1 1 #define FALSE #defi

25、ne FALSE 0 0#endif /#endif /* *_DEF_H_DEF_H_* */ /2021-11-11(2) Option.h 是硬件系统重要设置头文件,如果要修改系是硬件系统重要设置头文件,如果要修改系统的工作频率统的工作频率, ,总线宽度,一些重要地址的值可在总线宽度,一些重要地址的值可在本文件中修改,主要内容如下:本文件中修改,主要内容如下:/#define FCLK 101250000 /SDRAM 2.5V use/#define FCLK 101250000 /SDRAM 2.5V use#define FCLK 202800000 /#define FCLK 2

26、02800000 /#define HCLK (FCLK/2) /#define HCLK (FCLK/2) /#define PCLK (FCLK/4) / #define PCLK (FCLK/4) / #define UCLK PCLK#define UCLK PCLK/ BUSWIDTH : 16,32/ BUSWIDTH : 16,32#define BUSWIDTH (32)#define BUSWIDTH (32)2021-11-11/64MB/ 0 x30000000 0 x30ffffff : Download Area (16MB) Cacheable/ 0 x310000

27、00 0 x33feffff : Non-Cacheable Area/ 0 x33ff0000 0 x33ff47ff : Heap & RW Area/ 0 x33ff4800 0 x33ff7fff : FIQ User Stack Area/ 0 x33ff8000 0 x33fffeff : Not Used Area/ 0 x33ffff00 0 x33ffffff : Exception & ISR Vector Table#define _RAM_STARTADDRESS 0 x30000000#define _NONCACHE_STARTADDRESS0 x3

28、1000000#define _ISR_STARTADDRESS 0 x33ffff00 #define _MMUTT_STARTADDRESS 0 x33ff8000#define _STACK_BASEADDRESS 0 x33ff8000#define HEAPEND 0 x33ff00002021-11-11(3) 2410addr.h 是是2410的寄存器的地址宏定义头文件,方便使用,的寄存器的地址宏定义头文件,方便使用,主要内容如下:主要内容如下:/ 存储器控制器的配置寄存器的起始地址是:存储器控制器的配置寄存器的起始地址是:0 x480000000 x48000030,由于,由于

29、ARM的寄存器是的寄存器是32位位的,而一个地址放一个字节,所以需要个地址。的,而一个地址放一个字节,所以需要个地址。/ Memory control #define rBWSCON (*(volatile unsigned *)0 x48000000) /Bus width & wait status/INTERRUPT的配置寄存器的起始地址是:的配置寄存器的起始地址是:0 x4a0000000 x4a00001c。/ INTERRUPT#define rSRCPND (*(volatile unsigned *)0 x4a000000) /Interrupt request sta

30、tus2021-11-11注意注意: :在汇编语言中,用在汇编语言中,用2410addr.inc2410addr.inc文件。文件。 volatilevolatile的本意为的本意为 “ “暂态的暂态的”或或.“.“易变的易变的”,该说明符起到抑制编译器优化的作用。该说明符起到抑制编译器优化的作用。 如果在声明时用如果在声明时用“volatile”volatile”关键字进行修饰,关键字进行修饰,遇到这个关键字声明的变量,编译器对访问该变遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供特殊地量的代码就不再进行优化,从而可以提供特殊地址的稳定访问。址的稳定访问。 2

31、021-11-11 (4) 2410lib.h 是调试时常用函数,还有一些其它的常用函是调试时常用函数,还有一些其它的常用函数的头文件。数的头文件。 (5) 2410slib.h 包含包含MMU相关函数的头文件。相关函数的头文件。2021-11-113)SRC目录下的文件目录下的文件(1) 2410init.s (1) 2410init.s 是是24102410初始化启动程序,由汇初始化启动程序,由汇编语言写成编语言写成(2) 2410lib.c(2) 2410lib.c是描述了是描述了24102410的调试常用函数的的调试常用函数的原型,用原型,用C C语言写成。语言写成。(3) 2410s

32、lib.s(3) 2410slib.s包含汇编语言写的包含汇编语言写的MMUMMU相关的相关的程序代码。程序代码。(4) mmu.c(4) mmu.c包含包含MMUMMU相关的程序代码。相关的程序代码。(5) Uart0.c(5) Uart0.c包含了串口的常用函数原型,用包含了串口的常用函数原型,用C C语言写成。语言写成。2021-11-11主程序模板主程序模板.c/= =/ File Name : 2410test.c/ Function : S3C2410 Test Main Menu/ Program : Shin, On Pil (SOP)/ Date : June 13, 200

33、3/ Version : 0.0/ History/= =#include #include #include def.h#include option.h#include 2410addr.h#include 2410lib.h#include 2410slib.h#include uart0.h#include mmu.h2021-11-11void Isr_Init(void);void HaltUndef(void);void HaltSwi(void);void HaltPabort(void);void HaltDabort(void);extern void _rt_lib_in

34、it( void ) ;void Temp_Function( void ) ; /= =void Main(void) int i=0; / Led_Display(15); MMU_Init(); /初始化初始化MMU 2021-11-11/=void Main(void) int i=0; / Led_Display(15); MMU_Init(); /初始化初始化MMU #if ADS10 _rt_lib_init(); /for ADS 1.0#endif / ChangeClockDivider(0,0); / 1:1:1 / ChangeClockDivider(0,1); /

35、1:1:2 / rCLKDIVN |= (12); / 1:4:4/ ChangeClockDivider(1,0); / 1:2:2 ChangeClockDivider(1,1); / 1:2:4 ChangeMPllValue(0 xa1,0 x3,0 x1); / FCLK=202.8MHz 2021-11-11 Port_Init();/IO端口初始化端口初始化Isr_Init(); /设中断设中断Uart_Init(0,115200); /COM口初始化口初始化 /Save the wasted power consumption on GPIO.rIISPSR=(25)|(20)

36、; /IIS_LRCK=44.1Khz 384fs,PCLK=50Mhz.rGPHCON = rGPHCON & (0 xf18)|(0 x515) i=0;Led_Display(i);/控制四个控制四个LED显示显示2021-11-11void Isr_Init(void) pISR_UNDEF = (unsigned)HaltUndef; pISR_SWI = (unsigned)HaltSwi; pISR_PABORT = (unsigned)HaltPabort; pISR_DABORT = (unsigned)HaltDabort; rINTMOD = 0 x0; /All

37、=IRQ mode/ rINTCON=0 x5; /Non-vectored,IRQ enable,FIQ disable rINTMSK = BIT_ALLMSK; /All interrupt is masked. rINTSUBMSK = BIT_SUB_ALLMSK; /All sub-interrupt is masked. “-“程序程序”-“ARM Developer Suite -“ARM Developer Suite V1.2V1.2”-“Codewarrior for ARM Developer Suite”-“Codewarrior for ARM Developer

38、Suite”打打开开CodewarriorCodewarrior。如图所示。如图所示。5.2 ADS5.2 ADS的使用简介的使用简介2021-11-11ADS ADS 为用户提供了为用户提供了7 7 个模板,分别是:个模板,分别是:1)1) ARM Executable ImageARM Executable Image:用于由用于由ARM ARM 指令的代码生指令的代码生成一个成一个ELF ELF 格式的可执行映象文件;格式的可执行映象文件;2 2)ARM Object LibraryARM Object Library:用于由用于由ARM ARM 指令的代码生成指令的代码生成一个一个ar

39、mar armar 格式的目标文件库;格式的目标文件库;3 3)Empty ProjectEmpty Project:用于创建一个不包含任何库或者源文用于创建一个不包含任何库或者源文件的工程;件的工程;4 4)Makefile Importer WizardMakefile Importer Wizard:用于将用于将VC VC 的的nmake nmake 或或者者GNU make GNU make 文件转入到文件转入到Code Warrior IDE Code Warrior IDE 工程文件;工程文件; 2021-11-11 5 5)Thumb ARM Executable ImageTh

40、umb ARM Executable Image:用于由用于由ARM ARM 指令指令和和Thumb Thumb 指令的混合代码生成一个可执行的指令的混合代码生成一个可执行的ELF ELF 格式的格式的映象文件;映象文件;6 6)Thumb Executable imageThumb Executable image:用于由用于由Thumb Thumb 指令创指令创建一个可执行的建一个可执行的ELF ELF 格式的映象文件;格式的映象文件;7 7)Thumb Object LibraryThumb Object Library:用于由用于由Thumb Thumb 指令的代码指令的代码生成一个生

41、成一个armar armar 格式的目标文件库。格式的目标文件库。2021-11-11 一般情况下均选择一般情况下均选择“ARM Executabel Image”ARM Executabel Image”,然,然后在后在“Project name:”Project name:”栏输入工程名称,在栏输入工程名称,在“Location:”Location:”栏指定路径,本例子的工程名称为栏指定路径,本例子的工程名称为“ledflash”ledflash”,点击确定,点击确定后后“ledflash”ledflash”工程建立。注意路径设置和工程名不要使用工程建立。注意路径设置和工程名不要使用汉字。

42、汉字。 2021-11-11 工程建立以后将生成一个空的工程管理窗口,接下来就工程建立以后将生成一个空的工程管理窗口,接下来就是向工程内添加和建立目标文件了。是向工程内添加和建立目标文件了。 先通过点击右键选择先通过点击右键选择“Create Group”Create Group”,建立一个,建立一个“SRC”SRC”文件夹,然后再右文件夹,然后再右键选择键选择“Add Files”Add Files”来添加文件,如图所示。来添加文件,如图所示。2021-11-11 在添加文件的过程中你可能已经发现了在添加文件的过程中你可能已经发现了CodeWarrior IDE CodeWarrior ID

43、E 为用户建立了三个为用户建立了三个TargetTarget,分别是,分别是“DebugRel”DebugRel”、“Realse”Realse”、“Debug”Debug”,这三个,这三个Target Target 分别表示三种调试方式。分别表示三种调试方式。 DebugRelDebugRel 表示在生成目标的时候会为每一个源文表示在生成目标的时候会为每一个源文件生成调试信息;件生成调试信息; DebugDebug 表示为每一个源文件生成最完全的调试信息;表示为每一个源文件生成最完全的调试信息; ReleaseRelease 表示不生成任何调试信息。表示不生成任何调试信息。 2021-11-

44、11 一般默认选择一般默认选择“DebugRel”DebugRel”。 同样的方法增加同样的方法增加SRCSRC文件的一些头文件文件的一些头文件, ,这些头文件这些头文件可以加也可以不加,如果不加,则最好放在当前的目录可以加也可以不加,如果不加,则最好放在当前的目录下。至此工程建立完毕。如图所示。下。至此工程建立完毕。如图所示。2021-11-11 工程建立完毕之后暂时还不能进行编译和链接,还需要工程建立完毕之后暂时还不能进行编译和链接,还需要进行一些配置。可以通过进行一些配置。可以通过“Edit”-“DebugRel Settings”Edit”-“DebugRel Settings”或者或

45、者“ALT+F7ALT+F7”来进入来进入“DebugRel Settings”DebugRel Settings”。如图所。如图所示。示。2021-11-11“DebugRel Settings”“DebugRel Settings”里面包含了很多设置信息,里面包含了很多设置信息, “Post-Linker”Post-Linker”用于对输出文件进行操作,由于本例用于对输出文件进行操作,由于本例是需要最终写入到硬件中并运行的,所以必须进行设置。是需要最终写入到硬件中并运行的,所以必须进行设置。 选择选择“ARM fromELF”ARM fromELF”,表示编译后生成映象文,表示编译后生成映

46、象文件(件(ImageImage)后再调用)后再调用FromELF FromELF 命令进行格式转换,命令进行格式转换,以转换成以转换成.bin .bin 或者或者.hex .hex 等可以直接烧写到目标芯片执等可以直接烧写到目标芯片执行的文件。行的文件。 点击点击TargetTarget里面的里面的File MappingsFile Mappings即是文件映射,即是文件映射,里面放有里面放有ADSADS调试时所支持的文件格式,如调试时所支持的文件格式,如CPPCPP、C+C+,C C等,如图所示。等,如图所示。2021-11-112021-11-11 “Language Settings”

47、“Language Settings”选项是调试程序时所支持的语选项是调试程序时所支持的语言格式。言格式。 本例使用了本例使用了“ARM Assembler”ARM Assembler”程序所对应的程序所对应的.s.s文件文件和和“ARM C Compiler”ARM C Compiler”程序所对应的是程序所对应的是.c.c文件,所以请确文件,所以请确保在这两个选项内的保在这两个选项内的“Target”Target”子选项内为子选项内为“ARM920T”ARM920T”,因为因为MY2410MY2410开发板的体系结构为开发板的体系结构为ARM920T ARM920T ,其他没有,其他没有用

48、到的语言可以不选,因为下载到板上的程序使用了用到的语言可以不选,因为下载到板上的程序使用了C C语言语言和汇编语言。和汇编语言。 2021-11-11 设置设置 “Linker”选项选项 在该选项里面有和硬件紧密相关的设置,首先进入在该选项里面有和硬件紧密相关的设置,首先进入“ARM Linker”ARM Linker”子选项,然后在选择子选项,然后在选择OutputOutput按键,按键, 再选中再选中“simple”simple”。在此,需要设置入口地址。在此,需要设置入口地址(entryentry):):RO RO 地址、地址、RW RW 地址,地址,RO BASERO BASE只读基址

49、,只读基址,存放代码段;存放代码段;RW BASERW BASE读写基址,存放数据段本例中读写基址,存放数据段本例中可不设。可不设。 2021-11-11 首先设置首先设置R0/RW R0/RW 地址,地址,RO RO 表示表示Read OnlyRead Only,RW RW 表示表示Read WriteRead Write,RO RO 栏默认是栏默认是0 x80000 x8000,需要根据实际,需要根据实际硬件进行更改,一般为硬件进行更改,一般为RORO表示本程序运行时表示本程序运行时SDRAMSDRAM的起的起始地址,设始地址,设0 x300000000 x30000000。 再选再选li

50、nktype(linktype(链接类型链接类型) )选择选择 simple-simple-简单链接,简单链接,partia(partia(是否分块是否分块) ),Scattered(Scattered(是否分散是否分散) ),在,在“ARM ARM Linker”-“Options”Linker”-“Options”内还需要设置一个内还需要设置一个“Image Image entry point”entry point”,表示映象文件的入口点,表示映象文件的入口点就是就是SDRAMSDRAM中中的起始地址。的起始地址。 2021-11-11设置设置“Layout”Layout” 设置代码中的

51、哪一段置于设置代码中的哪一段置于IMAGE IMAGE 的起始位置:(即是的起始位置:(即是整个程序入口的函数调用,因为程序整个程序入口的函数调用,因为程序MAKEMAKE以后,整个程序以后,整个程序生成的入口在生成的入口在2410init.s2410init.s文件当中),文件当中), ENTERENTER就是程序生就是程序生成入口点,其中成入口点,其中AREAAREA表示段标识,表示段标识,InitInit表示段名,表示段名,CODECODE表示代码段,表示代码段,READONLYREADONLY表示只读属性,表示只读属性,2410init.s2410init.s文件文件要进行编译生成相应

52、的要进行编译生成相应的.o.o文件,需要在文件,需要在object/smybol (object/smybol (目标目标和记号和记号) )表上表上2410init.o2410init.o表示程序执行时候生成可执行的表示程序执行时候生成可执行的.o.o文文件,件,section(section(进入点即入口的函数名,进入点即入口的函数名,initinit函数函数) )就是就是initinit函函数。通过上述设置后,然后进行编译、链接,这样产生的映数。通过上述设置后,然后进行编译、链接,这样产生的映像文件就有了唯一的程序入口点。像文件就有了唯一的程序入口点。 2021-11-112021-11-

53、11 在在“Linker”Linker”选项下还有一个子选项需要进选项下还有一个子选项需要进行设置,即行设置,即“ARM fromELF”ARM fromELF”,在,在“Target”Target”的的“Post-Linker”Post-Linker”设置成设置成“FromELF”FromELF”后后, ,才才会有多种输出文件格式的选择:比如我们要生成会有多种输出文件格式的选择:比如我们要生成plain binaryplain binary的二进制文件的二进制文件plain binaryplain binary,就选,就选择择plain binary plain binary ,一般设置成,

54、一般设置成“Plain binary”Plain binary”或者或者“Intel 32 bit hex”Intel 32 bit hex”。 如图所示。如图所示。2021-11-112021-11-11 进行输出文件名称和路径的设置,请带上扩进行输出文件名称和路径的设置,请带上扩展名展名.bin .bin 或者或者.hex.hex。当工程文件是从别处。当工程文件是从别处copy copy 过过来的时候请记得对该路径进行重新设置,不然将来的时候请记得对该路径进行重新设置,不然将出现警告提示。出现警告提示。 2021-11-11 如果你的工程文件是从别处如果你的工程文件是从别处copy cop

55、y 过来的则在编过来的则在编译之前还有一件事情需要做,即译之前还有一件事情需要做,即“Remove Object Remove Object Code”Code”,在选项在,在选项在“Project”Project”菜单下面。菜单下面。 如果红圈内的如果红圈内的.c .c 文件前面没有勾的图标的话表文件前面没有勾的图标的话表示该工程已经编译链接通过,如果需要重新编译则示该工程已经编译链接通过,如果需要重新编译则需要先进行需要先进行“Remove Object Code”Remove Object Code”操作以去除操作以去除一些和路径、目标文件等有关联的信息。一些和路径、目标文件等有关联的信

56、息。2021-11-11 到此为止已经完成基本设置,接下来可以进到此为止已经完成基本设置,接下来可以进行编译和链接。进行行编译和链接。进行“Remove Object Code”Remove Object Code”操作后,然后操作后,然后“Project”-“MakeProject”-“Make表示只编表示只编译不链接译不链接”或者或者F7F7,如果一切设置正确,进行,如果一切设置正确,进行编译。如果有错误和警告请一一改正,直至编编译。如果有错误和警告请一一改正,直至编译通过。译通过。 2021-11-11 最终生成可执行文件最终生成可执行文件led.bin/led.hexled.bin/l

57、ed.hex(因具体设置而(因具体设置而异)和调试文件异)和调试文件led.axfled.axf(映象文件)。其中可执行文件的(映象文件)。其中可执行文件的路径由用户在路径由用户在“LINKER”-“ARMfromELF”LINKER”-“ARMfromELF”中的设置中的设置所决定;而调试文件(映象文件)所决定;而调试文件(映象文件)“led.axf“led.axf“则默认生成则默认生成在在“. ledled _DataDebugRel”. ledled _DataDebugRel”下。下。 led.bin/ led.hex led.bin/ led.hex 可以通过工具软件直接烧入目标芯可

58、以通过工具软件直接烧入目标芯片运行。片运行。 led.axf led.axf 可以通过可以通过ADS ADS 里面集成的里面集成的AXD AXD 调试工具进行调试工具进行调试,可以软件仿真或者外部通过第三方调试,可以软件仿真或者外部通过第三方JTAG JTAG 调试工具调试工具进行调试。进行调试。2021-11-112 2. .AXDAXD调试调试 AXDAXD是是ADS ADS 软件中独立于软件中独立于CodeWarrior IDE CodeWarrior IDE 的图形软的图形软件,打开件,打开AXD AXD 软件,默认是打开的目标是软件,默认是打开的目标是ARMulatorARMulat

59、or。这也。这也是调试的时候最常用的一种调试工具,即软件仿真。是调试的时候最常用的一种调试工具,即软件仿真。 使用使用AXD AXD 必须首先要生成包含有调试信息的程序,在前必须首先要生成包含有调试信息的程序,在前面的面的led led 工程中,已经生成的工程中,已经生成的led.axf led.axf 就是包含有调试信息的就是包含有调试信息的可执行可执行ELF ELF 格式的映像文件。格式的映像文件。 2021-11-11 1 1)设置环境)设置环境 在做在做ADSADS调试之前,首先进行调试之前,首先进行“ARMulator”ARMulator”仿真仿真就是配置好就是配置好AXDAXD的调

60、试环境,的调试环境,“ARMulator”ARMulator”仿真一仿真一般是在不具备硬件条件的情况下进行软件仿真,多用于般是在不具备硬件条件的情况下进行软件仿真,多用于学习状态,并不能完全反映实际硬件运行状态。学习状态,并不能完全反映实际硬件运行状态。2021-11-11 方法一:方法一: 利用利用BANYAN II BANYAN II 软件和软件和Wiggler Wiggler 板板JTAG JTAG 调调试。首先需要安装试。首先需要安装BANYAN II BANYAN II 软件,并在调试前软件,并在调试前先运行它。注意:先运行它。注意:BANYANBANYAN支持支持WigglerWiggler和和Predefin

温馨提示

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

评论

0/150

提交评论