ARM嵌入式开发流程和开发工具Word下载.docx
- 文档编号:17768332
- 上传时间:2022-12-09
- 格式:DOCX
- 页数:14
- 大小:314.69KB
ARM嵌入式开发流程和开发工具Word下载.docx
《ARM嵌入式开发流程和开发工具Word下载.docx》由会员分享,可在线阅读,更多相关《ARM嵌入式开发流程和开发工具Word下载.docx(14页珍藏版)》请在冰豆网上搜索。
ARM嵌入式系统的开发流程非常灵活而复杂,尤其是软件开发过程牵涉到许多不同的开发过程,而且每个开发过程所使用的开发工具均不尽相同,因此,在深入学习ARM软件开发之前,有必要对ARM嵌入式开发流程和所使用的开发工具有一个初步的了解,本节就是要达到这样的目的,至于各个开发过程和开发工具的详细介绍请参考后续有关章节。
选择硬件平台
1、处理器的选择
嵌入式系统的核心部件是各种类型的嵌入式处理器。
据不完全统计,目前全世界嵌入式处理器的品种总量已经超过1000多种,流行体系结构有30几个系列。
但与全球PC市场不同的是,没有一种微处理器和微处理器公司可以主导嵌入式系统,仅以32位的CPU而言,就有100种以上嵌入式微处理器。
由于嵌入式系统设计的差异性极大,因此选择是多样化的。
ARM是近年来在嵌入式系统有影响力的微处理器制造商,ARM的设计非常适用于小的电源供电系统。
Apple在Newton手持计算机中使用ARM,另外有几款数字无线电话也在使用ARM。
设计者在选择处理器时要考虑的主要因素有:
1)处理性能
一个处理器的性能取决于多个方面的因素,如时钟频率,内部寄存器的大小,指令是否对等处理所有的寄存器等。
对于许多需用处理器的嵌入式系统设计来说,目标不是在于挑选速度最快的处理器,而是在于选取能够完成设计目标的处理器。
比如:
对于ARM处理器,如果需要使用软解压实现视频,应该尽量选用ARM9、Xscale等高档处理器。
而对于一般工业控制,则可以考虑ARM7芯片是否满足要求。
2)技术指标
当前,许多嵌入式处理器都集成了外围设备的功能,减少了芯片的数量,降低了整个系统的开发费用和技术难度。
开发人员首先考虑的是,系统所要求的一些硬件能否方便地连接到处理器上。
其次是考虑该处理器的一些支持芯片,如DMA控制器,内存管理器,中断控制器,串行设备、时钟等的配套。
各个厂家市场的ARM芯片都根据不同的设计目标扩展了丰富的接口,在选择处理器时应该考虑选择能够支持尽可能多的功能,尤其是相对设计复杂的功能。
3)功耗
嵌入式微处理器最大并且增长最快的市场是手持设备、电子记事本、PDA、手机、GPS导航器、智能家电等消费类电子产品。
这些产品对微处理器的基本要求是:
高性能、低功耗。
4)操作系统和软件支持工具的选择
操作系统的移植和开发是嵌入式设计中的一个关键阶段。
处理器和操作系统的选择在一定程度上互相影响,同时又将影响其软件支持工具,因此,处理器的选择的同时必须充分考虑操作系统的因素。
在ARM系统中,如果用户希望使用WindowsCE、Linux等操作系统,就需要选择ARM720T以上带有MMU(MemoryManagementUnit)功能的ARM芯片,ARM720T、ARM920T、ARM922T、ARM946T、Strong-ARM都带有MMU功能。
而ARM7TDMI则没有MMU,不支持WindowsCE和Linux,但目前有uCLinux以及uC/OS-II等不需要MMU支持的操作系统可运行于ARM7TDMI硬件平台之上。
事实上,uCLinux已经成功移植到多种不带MMU的微处理器平台上,并在稳定性和其他方面都有上佳表现。
另外,如果决定采用Linux、WindowsCE、vxWorks等操作系统时,在选择处理器时应该尽量选择该操作系统已经支持的处理器,这样可以大大加快开发进度,降低难度。
选择不同的操作系统,其软件开发过程和调试手段各不相同,你的选择方案是否能够提供各个开发阶段(包括bootloader开发、操作系统移植、驱动开发和应用开发)所需的软件支持工具也是一个必须考虑的因素。
5)是否内置调试工具
处理器如果内置调试工具可以大大缩小调试周期,降低调试的难度。
ARM提供JTAG调试接口,而且有众多的第三方厂家推出各种调试工具。
2、硬件平台的选择
选择好目标微处理器后还需要准备硬件平台。
目前国内外有许多针对各种ARM微处理器的开发板,这些开发板对所支持的ARM微处理器做了详细的硬件评估和软件支持。
在自己动手设计硬件平台之前,购买一块这种开发板作为测试平台,进行学习和参考,这样可以大大加快开发进度。
对于一些应用,也可以直接在这些开发板上进行,这样可以省略硬件设计的阶段。
如果您不打算购买开发板作为测试平台,您就需要自行设计硬件平台。
在本书的第5章中,以目前国内ARM9的主流芯片:
Samsung公司的S3C2410为例,详细介绍了该处理器的硬件架构和硬件接口扩展方法。
硬件驱动调试
如果硬件平台是自行设计的,必须首先对硬件进行调试,硬件调试成功是进行操作系统移植和应用程序开发的一个基本前提。
这个过程通常是通过编写一些简单的测试程序直接驱动硬件以验证硬件是否正确,这些程序可以基于操作系统进行编程,也可以不使用操作系统,而且后一种方法来得更加简单,调试也更方便和快捷。
这一类过程通常采用图4-1所示的开发模式,在运行于Windows的ADS中编写程序并编译,然后通过Multi-ICE下载并调试程序。
由于这个过程的编程动作依赖于硬件,采用这种模式可以充分利用在线仿真器的强大的软件调试功能,从而加快排错过程。
操作系统的选择和移植
在单片机系统中,由于受硬件资源的限制,同时应用程序通常比较简单,因此,通常不使用操作系统,直接采用前后台程序控制方式设计软件系统。
前台运行一个死循环作为主程序流程,在主程序中设置中断,当中断产生的时候,运行后台中断服务程序,然后返回继续运行主程序。
这样的开发方式在ARM开发中同样适用,而且对于一些小型应用完全可以采取这种方式,但是对于复杂应用,如复杂的图形用户界面、网络协议等,采用前后台控制方式进行设计的应用程序设计复杂,而且不便于软件模块的划分和软件升级、维护等。
在这种情况下,操作系统的优势展露无疑。
使用操作系统能够充分发挥ARM微处理器的优势。
目前绝大多数嵌入式操作系统都能够稳定运行在ARM微处理器上。
软件开发中必须首先选择合适的操作系统。
下面将简单介绍几种常用的嵌入式操作系统以及它们的基本开发流程。
1、μC/OS-II
μC/OS-II是一种免费公开源代码、结构小巧、具有可剥夺实时内核的实时操作系统。
其内核提供任务调度与管理、时间管理、任务间同步与通信、内存管理和中断服务等功能。
它可以基于ROM运行(ROMable)、可裁减,具有高度移植性。
从应用的角度来看,μC/OS-II提供了一个实时性非常好的嵌入式内核,在工业控制、数据采集等领域应用广泛。
但μC/OS-II内核不支持文件系统、网络协议等功能,而且没有提供统一的硬件驱动程序接口和开发工具链,在复杂应用中需要考虑内核以外功能的实现难易程度。
μC/OS-II内核不支持文件系统,不支持应用程序和驱动程序的加载,因此,在μC/OS-II开发中,内核、驱动程序和应用程序都是集中编译,也就是说,μC/OS-II编译以后的二进制代码中即包含内核代码,也包含驱动程序和应用程序的代码。
同时μC/OS-II没有提供统一的开发工具链,μC/OS-II程序的编译应该采用支持所选处理器的编译器。
对于ARM处理器,可以在Windows环境中使用ADS、ADTIDE中编译μC/OS-II,也可以在Linux环境中使用GNUGCC编译μC/OS-II。
因此可以采用图4-1所示的开发模式调试基于μC/OS-II的程序。
2、Linux/uClinux
Linux/uClinux是对于有MMU和没有MMU的处理器的Linux解决方案。
Linux内核的完全开放,使得可以自己设计和开发出真正的硬实时系统;
对于软实时系统,在Linux中也容易得到实现。
Linux/uClinux提供强大的文件系统、网络功能、GUI等软件模组支持,而且这些功能都是可以裁减的,同时它还提供了标准的驱动程序接口和软件开发接口,便于用户编程和程序维护。
Linux/uClinux自身具备一整套工具链(GNUGCC),包括编译和调试工具,用户可以自行建立嵌入式系统的开发环境和交叉运行环境,并且可以跨越在嵌入式系统开发中仿真工具(ICE)的障碍。
对于ARM处理器,Linux/uClinux内核、驱动程序以及应用程序的编译都在Linux环境中使用GNUGCC完成。
对于内核和驱动程序的调试通常借助于运行于Linux/uClinux之前的bootloader来完成,只有在很少的情况下需要借助在线仿真器完成。
对于应用程序的调试则可以完全抛弃在线仿真器,使用GDB完成。
在本书的第7章中介绍了bootloader以及Linux/uClinux的相关知识。
3、WindowsCE
WindowsCE是Windows界面在嵌入式处理器中的实现,它提供了友好的人机交互界面和强大的二次开发功能。
WindowsCE包括四大基本模块,它们提供了操作系统的关键特性,分别是:
内核(Kernel)模块、对象存储(ObjectStore)模块、GWES(用户、应用程序和操作系统之间的图形用户界面)模块和通信(Communication)模块。
WindowsCE拥有完善的软件支持开发工具,WindowsCE的核心移植和驱动开发使用专门的操作系统定制工具:
WindowsCEPlatformBuilder(简称PB)。
而应用程序的开发则有嵌入式开发工具包EmbeddedVisualTools,包括EmbeddedVisualC++(简称EVC)和EmbeddedVisualBasic(简称EVB)等。
同时EmbeddedVisualTools下还可以进行部分驱动程序的开发。
同时在WindowsCE中还提供了用于WindowsCE开发的bootloader:
EBOOT。
4、vxWorks
VxWorks是专门为实时嵌入式系统设计开发的操作系统内核,为程序员提供了高效的实时多任务调度、中断管理,实时的系统资源以及实时的任务间通信。
在各种CPU平台上提供了统一的编程接口和一致的运行特性,尽可能的屏蔽了不同CPU之间的底层差异。
应用程序员可以将尽可能多的精力放在应用程序本身,而不必再去关心系统资源的管理。
基于VxWorks操作系统的应用程序可以在不同CPU平台上轻松移植。
VxWorks是一种功能强大而且比较复杂的操作系统,包括了进程管理、存储管理、设备管理、文件系统管理、网络协议及系统应用等几个部分。
VxWorks只占用了很小的存储空间,并可高度裁减,保证了系统能以较高的效率运行。
所以,仅仅依靠人工编程调试,很难发挥它的功能并设计出可靠、高效的嵌入式系统,必须要有与之相适应的开发工具。
TornadoII就是为开发VxWorks应用系统提供的集成开发环境,TornadoII中包含的工程管理软件,可以将用户自己的代码与VxWorks的核心有效的组合起来,可以按用户的需要裁剪配置VxWorks内核;
vxSim原型仿真器可以让程序员不用目标机的情况下,直接开发系统原型,作出系统评估;
功能强大的CrossWind调试器可以提供任务级和系统级的调试模式,可以进行多目标机的联调;
优化分析工具可以帮助程序员从多种方式真正地观察、跟踪系统的运行,排除错误,优化性能。
ADS与Multi-ICE简介
本节将简单介绍ARM开发软件ADS(ARMDeveloperSuite)和Multi-ICE硬件仿真器。
在随后的节中,将以一个简单的例子描述如何在ADS集成开发环境下编写、编译并调试应用程序。
ARMADS全称为ARMDeveloperSuite,是ARM公司推出的用于ARM程序设计、开发和调试的集成开发工具。
现在ADS的最新版本是,它取代了早期的和。
它支持WindowsNT4,Windows2000,Windows98、Windows95、WindowsXP和WindowsMe等操作系统。
ADS由命令行开发工具,ARM运行时库,图形化集成开发环境(CodeWarrior和AXD),实用程序和支持软件组成。
下面将就每个部分作详细的介绍。
本文以ADS为例,并假设已经将ADS安装在“C:
\ProgramFiles\ARM\ADSv1_2\”目录下。
命令行开发工具
ADS包含一系列基于命令行的ARM编译、汇编、链接等工具,它们位于ADS安装目录的bin子目录下(C:
\ProgramFiles\ARM\ADSv1_2\Bin)。
它们既可以在命令控制台环境下使用,同时由于已被嵌入到了ADS的图形界面中,所以也可以在图形界面下通过参数设置等手段来使用。
1、ARMC(C++)编译器
ADS包含包含多种C编译器,包括:
armcc,tcc,armcpp和tcpp。
其中armcc是ARMC编译器,armcpp是ARMC++编译器,tcc是ThumbC编译器,tcpp是ThumbC++编译器。
2、ARM汇编器(armasm)
armasm是ARM和Thumb的汇编器.它对用ARM汇编语言和Thumb汇编语言写的源代码进行汇编。
3、ARM链接器(armlink)
armlink是ARM连接器。
该命令既可以将编译得到的一个或多个目标文件和相关的一个或多个库文件进行链接,生成一个可执行文件,也可以将多个目标文件部分链接成一个目标文件,以供进一步的链接。
ARM链接器生成的是ELF格式的可执行映像文件。
5、符号调试器(armsd)
armsd是ARM和Thumb的符号调试器。
它能够进行源码级的程序调试。
用户可以在用C或汇编语言写的代码中进行单步调试,设置断点,查看变量值和内存单元的内容。
ARM运行时库
ADS提供以下的:
在ADS软件安装路径的lib目录(C:
\ProgramFiles\ARM\ADSv1_2\lib)下有两个子目录:
armlib和cpplib。
这两个子目录提供了两种运行时库来支持被编译的C和C++代码,它们分别是:
ANSIC函数库和C++函数库。
环境变量ARMLIB必须被设置成指向库路径。
另外一种指定ARMC和ARMC++库路径的方法是,在链接的时候使用操作选项-libpathdirectory(directory代表库所在的路径),来指明要装载的库的路径。
需要说明的是,ADS安装成功后,ARMLIB被缺省指向到C:
\ProgramFiles\ARM\ADSv1_2\LIB目录,因此通常不用进行设置链接器就会自动从ARMLIB指定的库路径中找出这两个函数库的路径。
1、ANSIC函数库:
(armlib)
ARMC库包含浮点代数运算库、数学库等各类库函数。
与这些库相应的头文件在C:
\ProgramFiles\ARM\ADSv1_2\include目录中。
这个C函数库是由以下几部分组成:
1)在ISOC标准中定义的函数;
2)在semihosted环境下(semihosting是针对ARM目标机的一种机制,它能够根据应用程序代码的输入/输出请求,与运行有调试功能的主机通讯。
这种技术允许主机为通常没有输入和输出功能的目标硬件提供主机资源)用来实现C库函数的与目标相关的函数;
3)被C和C++编译器所调用的支持函数。
ARMC库提供了额外的一些部件支持C++,并为不同的结构体系和处理器编译代码。
ARMC库函数是以二进制格式提供的,并禁止修改。
如果读者想对库函数创建新的实现的话,可以把这个新的函数编译成目标文件,然后在链接的时候把它包含进来。
这样在链接的时候,使用的是新的函数实现而不是原来的库函数。
通常情况下,为了创建依赖于目标的应用程序,在ANSIC库中只有很少的几个函数需要实现重建。
2、C++函数库:
这个子目录包含了RogueWaveC++库和C++支持函数库。
RogueWaveC++库和C++支持函数库合在一起被称为ARMC++库。
与这些库相应的头文件安装在C:
\ProgramFiles\ARM\ADSv1_2\include目录下。
这个库是由以下几部分组成的:
1)版本为的RogueWaveStandardC++库;
2)C++编译器使用的支持函数;
3)RogueWave库所不支持的其他的C++函数。
RogueWaveStandardC++函数库的源代码不是免费发布的,可以从RogueWaveSoftwareInc.,或ARM公司通过支付许可证费用来获得源文件。
图形化集成开发环境(CodeWarrior和AXD)
1、CodeWarriorforARM
CodeWarriorforARM是一套完整的集成开发工具,充分发挥了ARMRISC的优势,使产品开发人员能够很好的应用尖端的片上系统技术.该工具是专为基于ARMRISC的处理器而设计的,它可加速并简化嵌入式开发过程中的每一个环节,使得开发人员只需通过一个集成软件开发环境就能研制出ARM产品,在整个开发周期中,开发人员无需离开CodeWarrior开发环境,因此节省了在操做工具上花的时间,使得开发人员有更多的精力投入到代码编写上来,
CodeWarrior集成开发环境(IDE)为管理和开发项目提供了简单多样化的图形用户界面。
用户可以使用ADS的CodeWarriorIDE为ARM和Thumb处理器开发用C,C++,或ARM汇编语言的程序代码。
通过提供下面的功能,CodeWarriorIDE缩短了用户开发项目代码的周期。
1)全面的项目管理功能;
2)子函数的代码导航功能,使得用户迅速找到程序中的子函数。
可以在CodeWarriorIDE为ARM配置各种命令行工具的参数,实现对工程代码的编译,汇编和链接。
CodeWarriorIDE能够让用户将源代码文件,库文件还有其他相关的文件以及配置设置等放在一个工程中。
每个工程可以创建和管理生成目标设置的多个配置。
例如,要编译一个包含调试信息的生成目标和一个基于ARM7TDMI的硬件优化生成目标,生成目标可以在同一个工程中共享文件,同时使用各自的设置。
CodeWarriorIDE为用户提供下面的功能:
源代码编辑器,它集成在CodeWarriorIDE的浏览器中,能够根据语法格式,使用不同的颜色显示代码;
源代码浏览器,它保存了在源码中定义的所有符号,能够使用户在源码中快速方便的跳转;
查找和替换功能,用户可以在多个文件中,利用字符串通配符,进行字符串的搜索和替换;
文件比较功能,可以使用户比较路径中的不同文本文件的内容。
ADS的CodeWarriorIDE是基于MetrowerksCodeWarriorIDE版本的。
它经过适当的裁剪以支持ADS工具链。
针对ARM的配置面板为用户提供了在CodeWarriorIDE集成环境下配置各种ARM开发工具的能力。
以ARM为目标平台的工程创建向导,可以使用户以此为基础,快速创建ARM和Thumb工程。
尽管大多数的ARM工具链已经集成在CodeWarriorIDE,但是仍有许多功能在该集成环境中没有实现,这些功能大多数是和调试相关的,因为ARM的调试器没有集成到CodeWarriorIDE中。
由于ARM调试器(AXD)没有集成在CodeWarriorIDE中,这就意味着,用户不能在CodeWarriorIDE中进行断点调试和查看变量。
2、ADS调试器
这里所说的调试器本身是一个软件,用户通过这个软件并配合调试代理(debugagent)可以对包含有调试信息的,正在运行的可执行代码进行比如变量的查看,断点的控制等调试操作。
调试代理执行调试器发出的命令,如:
设置断点,单步运行,从存储器中读数据,把数据写到存储器等。
调试代理既不是被调试的程序,也不是调试器。
在ARM体系中,它可能是下面几种情况中的一个:
1)在线实时仿真器
在线实时仿真器通过JTAG端口与目标机进行连接,可以实现对ARM处理器的在线、实时调试,且不占用系统资源。
Multi-ICE(Multi-processorin-circuitemulator)是ARM公司自己的JTAG在线实时仿真器。
它支持全系列的ARM核,通过并口与PC机连接,数据接口为8位。
Multi-ICE内部采用FPGA实现并口到JTAG的协议转换,速度很快,下载速度可在120kByte/s左右。
本章下节将要提到的ADT1000A仿真器也是一种在线实时仿真器。
2)ARMulator
ARMulator即软件模拟器,它独立于处理器硬件,是一种有效的源程序检验和测试工具。
但是,模拟器毕竟只是以一种处理器模拟另一种处理器的运行,在指令执行时间、中断响应、定时器等方面与实际处理器有相对大的差别。
3)Angel
Angel为一个运行于目标机上的监控程序,它在调试器和目标板之间通过一定的通信方式,如:
串口通信,为用户提供各种调试功能。
这种方式需要占用目标机系统资源,如串口、ROM、RAM等。
ADS中包含有3个调试器:
1)AXD(ARMeXtendedDebugger):
ARM扩展调试器;
2)armsd(ARMSymbolicDebugger):
ARM符号调试器;
3)与老版本兼容的Windows或Unix下的ARM调试工具,ADW/ADU(ApplicationDebuggerWindows/Unix)。
实用程序
此外,ADS还提供了许多实用工具,下面简单的介绍开发中经常用到的程序:
1、fromELF
这是ARM映像文件转换工具。
该命令将ELF格式的文件作为输入文件,将该格式转换为各种输出格式的文件,包括plainbinary(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ARM 嵌入式 开发 流程 工具