[计算机硬件及网络]第六章 嵌入式软件系统设计.doc

上传人:sccc 文档编号:4561420 上传时间:2023-04-27 格式:DOC 页数:55 大小:4.09MB
返回 下载 相关 举报
[计算机硬件及网络]第六章 嵌入式软件系统设计.doc_第1页
第1页 / 共55页
[计算机硬件及网络]第六章 嵌入式软件系统设计.doc_第2页
第2页 / 共55页
[计算机硬件及网络]第六章 嵌入式软件系统设计.doc_第3页
第3页 / 共55页
[计算机硬件及网络]第六章 嵌入式软件系统设计.doc_第4页
第4页 / 共55页
[计算机硬件及网络]第六章 嵌入式软件系统设计.doc_第5页
第5页 / 共55页
点击查看更多>>
资源描述

《[计算机硬件及网络]第六章 嵌入式软件系统设计.doc》由会员分享,可在线阅读,更多相关《[计算机硬件及网络]第六章 嵌入式软件系统设计.doc(55页珍藏版)》请在三一办公上搜索。

1、第六章 嵌入式软件系统设计嵌入式系统开发包括软件开发和硬件开发,在嵌入式系统总体方案设计之后,嵌入式系统软件开发与硬件开发可以并行实施。嵌入式软件设计1 结构与方法2 设计范型与编程3 嵌入式操作系统4 异常与中断l 嵌入式软件开发过程l ARM软件开发工具ADS IDE简介l ARM软件设计与代码分析6.1 嵌入式系统软件开发概述 嵌入式系统软件的开发与传统软件开发有许多共同点,它继承了许多传统软件开发的习惯,由于嵌入式软件运行于特定的目标应用环境,因此嵌入式软件的开发亦有其特殊的要求,即需要有交叉的开发环境,程序需要固化,同时开发的嵌入式软件对实时性、稳定性、可靠性有苛刻的要求。1、嵌入式

2、系统软件开发流程q 需求分析阶段:确定设计任务和目标,并提炼出设计规格说明书,作为正式设计指导和验收的标准;确定嵌入式软件开发工具、嵌入式软件运行环境。q 设计阶段:包括概要设计和详细设计。概要设计描述系统如何实现所述的需求,包括数据流分析、功能模块的划分、系统的软件开发工具选择以及关键问题的论证等。q详细设计是描述各个模块的实现方法与过程,确定任务的结构及给出任务模块间接口定义等问题,给出每个任务模块的程序流程图,以作为编码人员的编码准则。q编码实现阶段:包括代码编程、交叉编译和交叉链接/定位、交叉调试。代码编程是依据详细设计形成的流程图、接口参数传递规则,分层次、分模块编制相应的源程序代码

3、。交叉编译和交叉链接是指在编码完成后,要进行编译和链接一生成可执行代码的工作,所谓交叉编译就是指在一个平台上生成另一个平台上的可执行代码,即在宿主机(PC)上生成目标机(嵌入式系统)上的可执行代码。交叉调试是指编码编译完成后进行调试阶段。嵌入式软件开发需要交叉开发环境,调试采用的是包括目标机和宿主机的调试方法。调试器运行在宿主机的通用操作系统上,而被调试程序则运行在基于特定硬件平台的嵌入式系统上,调试器与被调试程序间可以进行通信,调试器可以控制、访问被调试程序,读取其当前状态和改变其运行状态。软件调试分为单元调试和集成调试。单元调试是指编码完成后,对各个模块进行单元调试(单独调试),以保证单模

4、块正常工作。 集成调试是指将各分离的模块按照功能层次逐级连接调试。其关键在于解决个功能模块的互连和互操作性问题。软件固化与测试:在上述的交叉调试过程中,被调试程序的运行是在目标机的RAM中被执行的。嵌入式软件大多是要驻留在目标环境的非易失性存储器中或在其中运行,因此目标程序要烧写到目标机的Flash中固化,保证每次运行后下一次运行无误。嵌入式应用软件调试完成后,编译器要对源代码重新编译一次,以产生固化到目标机的可执行代码,再烧写到目标机的Flash中。固化的可执行代码与用于调试的可执行代码有些不同,固化的代码在目标文件中把调试的信息都屏蔽掉了。测试是指在可执行代码烧写到目标机中固化后,还要进行

5、运行的测试,以保证程序的运行正确无误。一般是对开发的软件进行系统的功能测试和性能测试。通过功能测试来发现软件存在功能上的不足,给出完善的解决办法;通过性能测试(负载测试和压力测试)来检验软件在稳定性和健壮性等性能指标上是否达到要求,发现问题并给出解决方案。2、ARM主流开发工具嵌入式系统开发涉及多种软/硬件开发工具。选择合适的开发工具可以加快开发进度,降低开发成本。从软件开发角度来讲,一套含有交叉编译器、汇编器、连接器、调试器和工程管理工具的开发套件是必不可少的,当然开发者也可以根据实际情况和开发需要来选用嵌入式操作系统(移植、定制)、函数库、评估板、JTAG仿真器、在线仿真器等工具。这样的开

6、发套件运行在宿主机(PC)上,在Windows环境下,有ARM公司的软件开发工具包(SDT)、ADS和RVDS。在Linux环境下,主要有GNU开发工具。ARM RealView Developer Suite 2.2(RVDS)ARM_RVDS(RealView Developer Suite)是ARM公司推出的新一代开发工具包,它由RealView编译器(RVCT)、汇编器(armasm)、连接器(armlinker)、调试器(RVDebugger)组成。它含有先进的代码生成工具并根据Cortex-A8处理器的特性进行了增进,从而能够提供杰出的性能和无以伦比的代码密度。ARM RealVi

7、ew开发工具包是一套完整的、高性价比开发调试工具,用于半导体通用32位微控制器(MCU)产品。RVDS 4.0标准版适用于所有的ARM7、ARM9、ARM10、ARM11、MP-Core、SCx00、Cortex-M3、Cortex-M1、Cortex-R4F和Cortex-A8处理器,08年10月新推出的RVDS 4.0专业版除了延伸支持到Cortex-A9以外,还具有独特的运行时优化功能、ARM向量化NEON编译器、ARM Profiler和ARM超快速模块(ARM926EJ-S、ARM1136J(F)-S、ARM1176JZ(F)-S、Cortex-R4、Cortex-A8和单核Cort

8、ex-A9)。RVDS 4.0专业版的演示版从2008年10月15日开始就已经可以从亿道电子公司的网站上免费下载。厂商、ARM针对采用Intel XScale(技术的网络基础设施、无线和存储设备,推出ARM Real View开发工具组。该工具组提供最佳编码生成功能,同时可降低开发成本。作为唯一支持所有顺应ARM结构的Intel Xscale处理器的工具组,RealView能帮助开发人员增强应用功能。ARM Developer Suite(ADS) ADS全称为ARM Developer Suite,是ARM公司提供的专门用于ARM相关应用开发和综合调试的综合性软件。ADS由命令行开发工具、A

9、RM运行时库、GUI开发工具(Code Warrior和AXD)、实用程序和支持软件组成。它支持所有ARM系列处理器,除了可以安装在 Windows NT4, Windows2000操作系统下,还支持 Windows XP 操作系统和RedHat Linux。在Windows操作系统环境下,通常选用ARM_RVDS、ARM ADS/SDT + 调试器来开发嵌入式软件。在Linux操作系统环境下,主要使用GNU(GNUs Not Unix)开发工具,因为这些工具相互兼容、前后贯穿、彼此配合,因此又称为GNU/Linux ARM 工具链或GNU/Linux ARM 交叉工具链. 3、常用调试方法开

10、发ARM应用程序时,程序编辑、编译、汇编、链接等都可以在宿主机上完成,但是调试工作则需要其它的硬件模块或工具配合。目前常用的调试方法和工具有指令集模拟器、驻留监控软件、JTAG仿真器和在线仿真器等。软件仿真(指令模拟器):指令模拟器是完全基于PC宿主机的软件仿真,可以模拟目标中的处理器的功能和指令。指令模拟器一般与编译器集成在同一环境中,可以方便用户在宿主机上调试应用程序和代码,但因指令模拟器与实际的硬件环境有一定差异,所以只能用于进行初步的调试。ARMulator就是一个指令模拟器,在Windows和Linux系统都有实现。驻留监控调试:驻留监控软件是一段运行在目标板上的可执行程序,它主要负

11、责监控目标机上的被调试程序的运行情况,与宿主机端的调试器一起完成对应用程序的调试。PC宿主机上的调试器通过网口、并行端口、串行端口或USB口等通信端口与驻留监控软件交互。调试器发送命令给驻留监控软件,由驻留监控软件控制程序执行、读写寄存器和存储器、设置断点等,从而实现调试。这种方法对硬件要求高,一般在硬件稳定之后进行,需要占用目标板上的一部分资源,不能对程序的全速运行进行完全仿真。ARM公司的Angel就是一种常驻在目标机Flash中的驻留监控软件,只需通过RS_232C串口与PC宿主机相连,就可以在PC宿主机对使用ARM处理器的目标机进行开发与调试。被调试程序通过监控程序下载到目标机上后,就

12、可开始进行调试。Angel的主要功能:具有Debug调试功能。支持Angel调试协议(ADP),能够实现PC宿主机与目标机的串行或并行通信。具有多任务调度和处理器模式管理功能。支持中断功能q JTAG仿真器:JTAG仿真器又称为JTAG调试器,通过ARM芯片的内嵌JTAG边界扫描接口和CPU核通信,进行调试。开发套件配合JTAG仿真器是目前使用最多的调试方式。在线仿真器(ICE)使用仿真头完全取代目标板上的CPU,从而完全仿真ARM芯片的行为,提供更深入的调试能力。这种完全非插入式调试,不使用片上资源,无需目标存储器,不占用目标系统的任何端口,仿真效果更加接近于目标硬件,但成本高。q 4、AR

13、M映像文件格式映像文件(image)是计算机上的一个可执行文件,在执行之前被加载到计算机存储器中,通常一个映像文件中包含多个线程。ARM集成开发环境中的各种源文件(汇编程序、C程序以及C+)经过ARM编译器编译之后,生成ELF格式的目标文件。这些目标文件和相应的C/C+运行时库经过ARM连接器连接后,生成.axf映像文件。.axf映像文件也是ELF格式,只是包含特定格式的调试信息,可以在开发板上调试运行。映像文件调试结束后,可以使用fromelf工具将映像文件中的调试信息和注释过滤掉,生成二进制的可加载映像文件(通常带后缀.bin)。可加载映像文件可以烧写到目标机的Flash中,在加电启动过程

14、中被执行。ELF文件格式:ELF(Executable and Linking Format)格式是可执行连接文件格式,是UNIX系统实验室(USL)作为一种应用程序二进制文件接口而开发和发布的。工具接口委员会选择了正在发展中的ELF标准作为工作在32位Intel体系结构上不同操作系统之间可移植的二进制文件格式。ELF文件是x86 Linux下的一种常用目标文件格式,也是ARM处理器的常用目标文件格式。ELF文件主要有3种类型:l 适用于连接的可重定位文件:可与其它目标文件一起创建可执行文件和共享目标文件。l 适用于执行的可执行文件:规定了如何创建一个程序的进程映像,加载到内存执行。l 共享目

15、标文件:连接器可以把它与其它可重定位文件和目标文件连接成其它的目标文件。ELF文件有双重特性(可重定位,可执行),ARM连接器把ELF文件当作由节头部表(section header table)描述的一组逻辑节,而系统加载器则把ELF文件当作由程序头部表(Program header table)描述的一组代码段,一个代码段通常由几个节组成。由于ELF文件既可以是可重定位的目标文件,又可以是可执行文件。因此可以用下面两个视图来观察ELF文件的主体结构。ELF文件格式的两种视图ARM映像文件的组成:ARM处理器的映射文件是.axf文件或者.bin文件。 .axf文件和.bin文件的区别是前者包

16、含了调试信息和注释信息,后者没有。编译器输出的ARM映像文件以.axf文件为主,通过fromelf工具,可以把.axf文件转换成.bin文件。实际下载到目标系统板的映像文件多数是.bin文件格式。1. ARM的ELF文件的内部结构(表):ELF头信息程序头部表代码段数据段未初始化全局变量“.symtabl”节“.strtab”节“.shstrtab”节调试节节头部表 表中只有ELF头部信息是国定的,其余部分实际顺序可能有所不同。ELF文件其余部分的位置由ELF头部信息、程序头部表和节头部表定义。 2.ARM的ELF文件的段结构:有3个段ARM的ELF文件有三种段结构。Text段包含可执行的代码

17、。Data段包含经过初始化的可读可写的数据。Bss(Block Started by Symbol)段用来存放程序中未初始化的全局变量的一块内存区域。Bss段属于静态内存分配,存放未初始化的全局C变量。 3.ARM的ELF文件的节结构: 在ELF文件规范中,一个可执行目标文件能够包含一个节头表,由节头表对文件中的节进行定义。在ARM的ELF文件中,所有的可执行代码至少具有两个节,除非激活连接器附带了“nodebug”参数。 这两个节分别是:符号表节(Symbol table section)字符串表节(string table section)节名称字符串表(section name stri

18、ng table),它保存了所有节的文字名称。调试节:ARM的ELF文件支持三种类型的调试信息,这三种调试信息都存放在调试节里。可执行ELF文件的连接器通过检查该目标代码的节表就能够分辨出这三种调试信息。4.目标文件和映像文件的内部结构块:ARM映像文件的内部组织有层次结构的性质,映像文件含有3种成分:域(region),输出段(output section),输入段(input section)。各输入段包含了目标文件中的代码和数据。连接器读入并处理若干个由程序员指定的输入段,而后输出一个映像文件。一个映像文件由一个或多个域组成,每个域包含13个输出段,每个输出段包含了一个或多个输入段。图示

19、给出了映像文件的生成过程。输入段的属性有:段属性:RO,RW,ZI(Zero-Initialized)ARM映像文件生成:目标文件_输入段ARM Link输出段_映像文件图示:ARM映像文件生成P1875.映像文件的加载视图和执行视图:映像文件域在加载时被映射存放到系统存储区。在执行映像时,往往需要移动一些域到执行地址并产生ZI输出段。譬如,初始化的RW数据也许要被迫从ROM区的加载地址拷贝到RAM区的执行地址。加载视图:根据映像文件装载到存储器时的地址描述每一个域和段,该视图是映像文件开始执行前,它的域和段的位置视图。执行视图:该视图是根据映像文件在执行时每一个域和段的地址描述,映像的各个组

20、成部分。图示:1P188a)加载时的地址映像 b)执行时的地址映像6.使用配置文件定义映像文件的的地址映像: 分组信息 定位信息图示:2P189ADT for ARM集成开发系统 6.2 ARM_ADS集成开发环境介绍ADS全称为ARM Developer Suite,是ARM公司推出的新一代ARM集成开发工具。现在ADS的最新版本是1.2,它取代了早期ARM SDT。它支持所有ARM系列处理器,除了可以安装在 Windows NT4, Windows2000操作系统下,还支持 Windows XP 操作系统和RedHat Linux。ADS由命令行开发工具、ARM运行时库、GUI开发工具(C

21、ode Warrior和AXD)、实用程序和ARM支持软件组成。有了这些部件,用户就可以为ARM系列的RISC处理器编写和调试自己的应用开发程序了。6.2.1 ARM_ ADS GUI开发工具 ARM_ ADS GUI 开发工具主要包括两个独立的工具:ARM Code Warrior IDE(代码斗士集成开发环境)和AXD((ARM eXtended Debugger ARM扩展调试器)1ARM Code Warrior IDEARM Code Warrior IDE集成了ADS的命令工具(包括编辑器,ARM汇编器,ARM和Thumb 的C/C+编译器,链接器,符号调试器,运行库等),用户可以

22、在Code Warrior IDE(Integrated Development Environment )为ARM配置各种命令工具,实现对工程代码的编辑、编译、汇编和链接。ARM Code Warrior IDE为管理和开发项目提供了简单多样化的图形用户界面,可以加快并简化嵌入式系统开发过程的每个环节,缩短了用户开发项目代码的周期。可以使用ADS的Code Warrior IDE为ARM和Thumb处理器开发用C、C+或ARM汇编语言的程序代码,为开发者提供全面的项目管理功能和子函数的代码导航能力,使得用户迅速找到程序中的子函数。Code Warrior IDE能够让用户将源代码文件、库文件

23、还有其他相关的文件以及配置设置等放在一个工程中。每个工程可以创建和管理生成目标设置的多个配置。例如,要编译一个包含调试信息的生成目标和一个基于ARM920T的硬件优化声称目标,生成目标可以在同一个工程中共享文件,同时使用各自的设置。Code Warrior IDE 为用户主要提供了下面的功能:l 按照工程项目(project)的方式来组织源代码文件、库文件和其他文件。l 设置各种生成选项(build options),以生成不同配置的映像文件。l 集成在Code Warrior IDE 的浏览器中源代码编辑器,能够为用户提供源代码编辑、字符串的搜索和替换、文本文件比较等功能。浏览器能使用户在源

24、代码中快速方便地跳转。l ARM汇编器能够对ARM和Thumb汇编语言的源代码进行汇编l 编译器能够把ARM和Thumb的C/C+程序编译成相应的指令代码。l ARM连接器可以将汇编、编译得到的一个或多个目标文件和和相关的一个或多个库文件进行连接,生成一个ELF格式的可执行映像文件。尽管大多数的ARM工具链已经集成在Code Warrior IDE,但是仍有许多功能在该集成环境中没有实现,这些功能大多数是和调试相关的,因为ARM的调试器(AXD)没有集成到Code Warrior IDE中,这就意味着用户不能在Code Warrior IDE中进行断点调试和查看变量。对于熟悉Code Warr

25、ior IDE的用户会发现,有许多的功能已经从Code Warrior IDE For ARM中移走。在Code Warrior IDE For ARM中有很多的菜单或子菜单不能使用的,下面介绍一下这些不能使用的选项。1View菜单下不能使用的菜单选项有: Processes,Expression,Globl Variable,Breakpoints,Registers。2Project菜单不能使用的菜单选项: Precompile子菜单。因为ARM编译器不支持预先编译的头文件。3Debug菜单中没有一个子菜单是可以使用的。4Browser菜单中不能使用的菜单有:New Property,Ne

26、w Method和New Event Set.5Help menu 中不能用于ADS的菜单有:Code Warrior Help,Index,Search和Online Manuals下面ARM Code Warrior IDE所涉及到的一些术语做一个简单介绍。l 目标系统(target system): 目标系统是指应用程序运行的环境,可以是基于arm的硬件系统(目标板),也可以是ARM仿真运行环境。譬如,当应用程序运行在ARM评估板上时,目标系统就是该评估板。l 生成目标(build target):生成目标是指生成特定目标文件的选项设置(包括汇编选项、编译选项、连接选项以及连接后的预处理

27、选项等)和所用的所有文件的集合。通常一个生成目标对应一个目标映像文件。当使用ADS的工程项目类型生成新工程项目时,在对话框中,工程项目生成目标需要用户自行选择,新工程项目工程包括3种生成目标类型: DebugRel:使用该目标(默认选择),生成目标对应的映射文件包含基本的调试信息;Debug:使用该目标,生成目标对应的映像文件包含最完全的调试信息,在开发过程中使用;Release:使用该目标,生成目标对应的映像文件不包含任何调试信息。如果当前生成目标是Debug,ARM Code Warrior有Debug Setting菜单项或工具栏按钮,通过它可以设置该生成目标对应的选项,这些选项对其他的

28、生成目标是无效。用户可以通过以ARM Code Warrior为目标平台创建工程向导,快速创建ARM和Thumb工程。ADS提供了7种可选的工程项目类型。(1). ARM Executabl Image:ARM可执行映像文件类型(2). ARM Object Library:ARM目标文件库类型(3). Empty Project:空工程类型(4). Makefile Importer Wizard:Makefile导入向导类型(5). Thumb RM Executabl Image:Thumb /ARM混合使用的映像文件类型(6). Thumb Executabl Image:Thumb可

29、执行映像文件类型(7). Thumb Object Library:Thumb目标文件库类型有关Code Warrior IDE中一些常用菜单的使用,将在后面的举例中具体说明的,在此不再赘述。2 ADS调试器AXDAXD是ADS的图形化调试工具,为嵌入式系统开发者提供了多种辅助调试手段来对程序进行调试,用户通过调试器使用debug agent(调试代理)可以对包含有调试信息的、正在运行的可执行代码,进行变量的查勘、断点的控制等调试操作。ADS中包含有3个调试器:l AXD(ARM eXtended Debugger):ARM扩展调试器;l Armsd(ARM Symbolic Debuger)

30、:ARM符号调试器(集成在Code Warrior ID中);l 与老版本兼容的Windows和UNIX下的ARM调试工具,ADW/ADU (Application Debugger Windows/Unix)。下面对在调试映像文件中所涉及到的一些术语作一个简单介绍。Debug target(调试目标文件):在软件开发的最初阶段,没有硬件的情况下,可以通过软件仿真来测试是否达到预期效果,调试器能够发送以下命令:(1) 装载映像文件到目标内存;(2) 启动或停止程序的执行;(3) 显示内存、寄存器或变量的值;(4) 允许用户改变存储的变量值。Debug agent(调试代理):Debug age

31、nt执行调试器发出的命令动作,譬如,设置断点、从存储器中读数据、把数据写到存储器等。在ARM体系中有三种调试代理:l ARMulator,打开AXD软件时默认打开的目标是ARMulator(ARM模拟器)l 基于JTAG的ICE类型的调试代理。l Angel调试监控程序(全面)。AXD可以在Windows和UNIX下,进行程序的调试。它为C、C+和汇编语言编写的源代码提供了一个全面的Windows和UNIX环境。6.2.2 ADS运行时库与实用程序1ARM运行时库运行时库是程序在运行时所需要的库文件,通常运行时库是以LIB或DLL形式提供的。运行时库类型和建立选项: ADS提供ANSI-C的运

32、行时库和C+运行时库,可以支持被编译的C和C+代码:ANSI C库函数:这个C函数库是由以下几部分组成。a)在ISO-C标准中定义的函数;b)在semihosted(半主机)环境下(semihosting是针对ARM目标机的一种机制,它能够根据应用程序代码的输入/输出请求,与运行有调试功能的主机通信,这种技术允许主机为通常没有输入和输出功能的目标硬件提供主机资源)用来实现C库函数的与目标相关的函数。 c)被C和C+编译器所支持的函数库 ARM C库提供了额外的一些部件支持C+,并为不同的结构体系和处理器编译代码。 ISO-C+库函数:2实用程序FromELF :这是ARM映像文件转换工具。该命

33、令将ELF格式的文件作为输入文件,将该格式转换为各种输出格式的文件,包括plain binary(BIN格式映像文件),Motorola 32-bit S-record format(Motorola 32位D映像文件),Intel Hex 32 format(Intel 32位格式映像文件)等。FromELF命令也能够为输入映像文件产生文本信息。armar:ARM库函数生成器将一系列ELF格式的目标文件以库函数的形式集合在一起,用户可以把一个库传递给一个连接器以代替几个ELF文件。Flash downloader:用于把二进制映像文件下载到ARM开发板上的Flash存储器的工具。3支持的软件

34、ADS为用户提供下面的软件,使用户可以在软件仿真的环境下或者在基于ARM的硬件环境调试用户应用程序。ARMulator:这是一个ARM指令仿真器,集成在ARM的调试器AXD中,它提供对ARM处理器的指令集的仿真,为ARM和Thumb提供精确的模拟。用户可以在硬件尚未做好的情况下,开发程序代码。6.3 使用ADS创建工程本节通过一个具体实例,为读者介绍如何使用ADS GUI集成环境,利用Code Warrior IDE提供的建立工程的模版来建立自己的工程,并学会如何进行编译连接,生成包含调试信息的映像文件(.axf)和可以直接烧写的Flash中的二进制可执行文件(.bin)。6.3.1 建立一个

35、工程一个工程是将所有的源代码文件组织在一起,并能够决定最终生成文件存放的路径、输出格式等。在开始的“所有程序”下拉菜单中,启动ADS_Code Warrior IDE后的初始界面如下:图6.1 ADS Code Warrior IDE主窗口工具栏中有File :主要用于建立新工程、打开一个工程,Edit:主要用于文本的编辑,目标设置。View:Search:Project:Debug:Window: 1建立工程:在Code Warrior IDE中新建立一个工程的方法有两种,可以在工具栏中单击“New”按钮,也可以在“File”菜单中选择“New”菜单。这样就会打开一个如下所示的对话框。图6.

36、2 New 对话窗口在这个对话框中为用户提供了7种可选择的工程类型。ARM Executable Image:用于由ARM指令的代码生成一个ELF格式的可执行映像文件;ARM Object Library:用于有ARM指令的代码生成一个armar格式的目标文件库;Empty Project:用于创建一个不包含任何库或源文件的工程;Makefile Importer Wizard:用于将Visual C的nmake或GUN make文件转入到Code Warrior IDE 工程文件。Thumb ARM Interworking Image:用于由ARM指令和Thumb指令的混合代码生成一个EL

37、F格式的可执行映像文件;Thumb Executable Image:用于由Thumb指令创建一个ELF格式的可执行映像文件;Thumb Object Library:用于有Thumb指令的代码生成一个armar格式的目标文件库;在这里选择ARM Executable Image,在“Project name”中输入工程文件名,本例为“wang20080413”,点击“Location”文本框的“set.”按钮,浏览选择想要将该工程保存的路径,将这些设置好后,点击“确定,即可建立一个新的名为wang20080413的工程。2在工程中添加源代码文件 建立工程工作完成后,会出现wang200804

38、23.Mcp的窗口,如下图所示。有三个标签页,分别是Files,Link order和Target,默认的是显示第一个标签页Files。通过在该标签页点击鼠标右键,选中“Add Files”可以把要用到的源程序添加到工程中。图6.3 工程窗口 对于本例,由于所有的源文件都还没有建立,所以首先需要建立源文件。标签页Target可以用来选择生成目标类型。(1)建立源文件 在工具栏的“File”菜单中选择“New”,在出现的如图6.2的New 对话框中,选择标签页File,在File name中输入要创建的文件名,输入“Init.s”,点击“确定”关闭窗口。在出现的文件编辑框中输入如下的汇编代码:/

39、*/ File Name : Init.s/Description:/Author:/Data:2010.4/* IMPORT Main AREA Init, CODE,READONLY ENTRY StartLDR R0,=0x3ff0000 LDR R1,=0xe7ffff80 ;配置SYSCFG,片内4K Cache,4K SRAM STR R1,R0 LDR SP,=0x3fe1000 ;SP指向4K SRAM的尾地址,堆栈向下生成 BL Main END在这段代码中,伪操作IMPORT告诉编译器符号Main不是在该文件中定义的,而是在其它源文件中定义的符号,但是本源文件中可能要用到该

40、符号。接下来用伪指令AREA定义段名为Iint的段是只读的代码段,伪指令ENTRY指出了程序的入口点。下面就是用汇编指令实现配置SYACFG特殊功能寄存器,将S3C2410片内的8K一体化的SRAM配置为4K Cache,4K SRAM,并将用户堆栈设置在片内的SRAM中。4K SRAM的地址为0x03FE00000x03FE1000-1,由于S3C2410B的堆栈由高地址向低地址生成,将SP初始化为0x03FE1000。完成上述操作后,程序转到Main函数执行。保存Init.s汇编程序。用同样的方法,再建立一个名为main.c的C源代码的文件。具体代码内容如下:/*/ File Name :

41、 main.c/ Description:/ Author:/ Data:2010.4/*#define IOPMOD (*(volatile unsigned*)0x03ff5000)/IO port mode register#define IOPDATA (*(volatile unsigned*)0x03ff5008)/IO port mode registervoid Delay(unsigned int);int Main()unsigned long LED;IOPMOD=0xffffffff; /将IO口置为输出模式IOPDATA=0x01;for (;) LED =IOPDA

42、TA; LED =(LED1); Delay (10); if ( ! (IOPDATA&0x0f) IOPDATA=0x01; return (0); void Delay( unsigned int x)unsigned int I,j,k;for(i=0;i=x;i+)for(j=0;j0xff;j+) for(k=0;k0xff;k+);该段代码首先将I/O模式寄存器设置为输出模式,为I/O数据寄存器赋初值为0x1,通过将I/O数据寄存器的数值进行周期性的左移,实现连接在P0P3口的LED显示器轮流被点亮的功能。(注意这里的if语句,时为了保证当I/O数据寄存器中的数在移位过程中,第4

43、位为数字“1”时,使得数字1通过和0xFF相与,又重新回到I/O数据寄存器的第0位,从而保证了数字1一直在I/O数据寄存器的低四位之间移位)。在这里还有一个细节要注意。在建立好一个工程时,默认的target是DebugRel,还有另外两个可用的target,分别是Release和Debug。现在已经建立了两个源文件,要把这两个源文件添加到工程中去。(2)将源代码文件添加到工程中为工程添加源代码常用的方法有两种,一种是使用图6.3所示方法,另一种是可以在“Project”菜单项中,选择“Add Files”,这两种方法都会打开文件浏览框,用户可以把已经存在的源代码文件添加到工程中来。当选中要添加

44、的文件时,会出现一个对话框,如下图所示,询问用户把文件添加到何类目标中,在这里,选择DebugRel目标。把刚才创建的两个源文件文件添加到工程来。图6.4 生成目标类型选DebugRel到目前为止,一个完整的工程已经建立。下面是对工程进行编译和连接。6.3.2 编译和链接工程在进行编译和链接前,首先讲述生成目标的相关配置。点击工具栏的Edit菜单,选择“DebugRel Settings”(注意,这个选项会因用户选择的不同目标而有所不同),出现如图6.5所示的对话框。图6.5 DebugRel目标设置对话框DebugRel Setting对话框中左侧的树形目录可以看出,DebugRel Set

45、ting的设置内容有很多,在这里只介绍一些最常用的设置选项,读者若对其它未涉及到的选项感兴趣,可以查阅相应的帮助文件。1Target设置选项目标设置的作用是告诉编译器和链接器,生成哪种类型的目标文件。其中target Setting选项有:Target Name 文本框显示了当前设置的生成目标类型。Linker 选项供用户选择要使用的链接器,在这里默认选择的是ARM Linker,使用该连接器,将使用armlink链接编译器生成的工程中的文件相应的目标文件。 Linker设置中还有两个可选项,None不是指不用任何连接器,如果使用它,则工程中的所有文件都不会被编译器或汇编器处理。ARM Librarian 表示将编译或汇编得到的目标文件转换为ARM库文件。对于本例,使用默认的连接器AR

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 教育教学 > 成人教育


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号