ARM开发工程师入门宝典.docx
- 文档编号:5978609
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:19
- 大小:404.89KB
ARM开发工程师入门宝典.docx
《ARM开发工程师入门宝典.docx》由会员分享,可在线阅读,更多相关《ARM开发工程师入门宝典.docx(19页珍藏版)》请在冰豆网上搜索。
ARM开发工程师入门宝典
获取更多权威电子书请登录
ARM嵌入式系统开发综述
ARM开发工程师入门宝典
获取更多权威电子书请登录
前言
嵌入式系统通常是以具体应用为中心,以处理器为核心且面向实际应用的软硬件系统,其硬件是整个嵌入式系统运行的基础和平台,提供了软件运行所需的物理平台和通信接口;而嵌入式系统的软件一般包括操作系统和应用软件,它们是整个系统的控制核心,提供人机交互的信息等。
所以,嵌入式系统的开发通常包括硬件和软件两部分的开发,硬件部分主要包括选择合适的MCU或者SOC器件、存储器类型、通讯接口及I/O、电源及其他的辅助设备等;软件部分主要涉及OSporting和应用程序的开发等,与此同时,软件中断调试和实时调试、代码的优化、可移植性/可重用以及软件固化等也是嵌入式软件开发的关键。
嵌入式系统开发的每一个环节都可以独立地展开进行详细的阐述,而本文的出发点主要是为嵌入式开发的初学者者提供一个流程参考。
因为对于初学者在面对一个嵌入式开发项目的时候,往往面临着诸多困难,如选择什么样的开发平台?
什么样的器件类型?
在进行编译时怎样实现代码优化?
开发工具该如何选择和使用?
在进行程序调试时应该注意那些问题以及选择什么样的嵌入式OS等等。
希望通过本文,能帮助初学者了解有关ARM嵌入式系统开发流程。
硬件工程师必读攻略----如何通过仿真有效提高数模混合设计性能(上)
2/28
获取更多权威电子书请登录
目录
前言..........................................................................................2
1嵌入式开发平台......................................................................4
1.1ARM的开发平台:
.........................................................4
1.2器件选型.........................................................................7
2工具选择...............................................................................11
3编译和连接............................................................................13
3.1RVCT的优化级别与优化方向.......................................16
3.2Multifilecompilation......................................................21
3.3调试...............................................................................22
4操作系统...............................................................................23
4.1哪里可以得到os软件包(OpenSourceandLinux
Kernel)................................................................................25
4.2安装镜像.......................................................................26
4.3交叉编译.......................................................................26
总结..........................................................................................27
硬件工程师必读攻略----如何通过仿真有效提高数模混合设计性能(上)
3/28
获取更多权威电子书请登录
1嵌入式开发平台
通常嵌入式开发的平台主要包括基于SoC或MCU开发板,板上提供常用的外设、接口和其他功能模块,开发者一般根据自己的应用需要选择适合自己板级开发平台。
在这样的平台上开发者可以进行硬件的扩展,操作系统移植和应用软件的开发、调试及固化,并最终形成自己的产品推向市场。
但是基于该平台的软件开发工作往往需要等到硬件平台完成后才能开展,这显然不利于缩短TTM(TimetoMarket),同时调试的过程也是需要反复迭代和修改设计的过程,因此硬件方案的变动在所难免。
因此在系统方案没有最终定型前,急于搭建硬件平台不仅费时费力,而且也会造成系统开发成本的提高。
因此在进行方案设计的时候,利用CPU或者其他外设的模型进行早期的评估是非常必要的。
1.1ARM的开发平台:
!
ARMulator仿真平台
这是一套最基础的ARM指令集仿真器,内嵌于ADS和RVDS中,是每一位ARM开发者的很好的起点。
ARMulator可以模拟执行开发人员编写的C或汇编程序,支持源代码调试,帮助开发者确定代码编写的正确性。
另一方面,ARMulator还能大致统计出,诸如:
代码执行周期数,Cache命中率,存储器访问等利于我们优化代码的信息。
但ARMulator是基于CPU的模拟,缺点在于比较难于模拟整个芯片系统的行为。
!
RealViewIntegrator-CP平台
硬件工程师必读攻略----如何通过仿真有效提高数模混合设计性能(上)
4/28
获取更多权威电子书请登录
RealViewIntegrator-CP平台(RealViewIntegratorCompactPlatform)可以整合CoreModule。
CoreModuleFPGA还整合了ARMPrimeCell系列周边器件和内存控制器,包括LCD,MMC卡,音频解码,以及客户自己开发AHB接口器件。
!
VersatilePB/AB平台
VersatilePlatformBaseboard(VersatilePB)是一个可以开发软硬件的PCB平台,可以用LogicTile,AnalyzerTile进行扩展,用来连接用户开发的器件,逻辑分析仪等。
而VersatileApplicationBaseboard(VersatileAB)主要区别是硬件扩展功能有限,因而主要用来进行软件应用开发。
!
EmulationBaseboard(EB)
EB平台有一块相对大的FPGA(XilinxVirtex2XC2V6000)可以放下用户设计的周边器件,EB可以通过CoreTile和LogicTile进行扩展,使用户做原型验证更加方便。
!
ESL虚拟平台
ARMESL虚拟平台利用SystemC模型构建整个SoC系统,可以基于两种模型构建:
时钟精确型(CA)和时钟近似型(CX),CA模型提供了和实际硬件时钟节拍一直的精确度,利用ESLSoCDesigner工具在ESLCA模型构建虚拟
硬件工程师必读攻略----如何通过仿真有效提高数模混合设计性能(上)
5/28
获取更多权威电子书请登录
仿真平台上,SoC硬件工程师利用ESL工具提供的强大的诸如Core运行状态监视、BusProfiling、Cache工作状态和MemoryMapping等可视化插件对系统性能观测和分析,定位系统性能的瓶颈,实现硬件的性能优化和功能划分。
此外,对于嵌入式软件开发工程师而言,ESL虚拟平台带来的最大好处是让软件开发在更早的阶段开展,而不必等到在硬件平台上进行此工作。
这样以来软硬件开发工作可以并行提高,缩短产品上市时间,软硬件的协同开发还可以尽早发现系统bug,降低开发风险和成本。
同时该虚拟平台还提供了ARM软件开发调试工具接口同步进行软件调试,在ESL虚拟平台上实现软硬件的协同仿真,可以实现优化软件的目的。
从图1看,传统流程中容易引起反复的环节,而对引入ESL的开发流程,可将诸如驱动开发调试等,提前放置到虚拟开发平台上进行,实现系统设计的优化、
缩短开发周期等。
而且仿真环境所能提供的调试手段,是FPGA平台所无法比拟的。
图1传统和引入ESL工具的SoC开发流程
硬件工程师必读攻略----如何通过仿真有效提高数模混合设计性能(上)
6/28
获取更多权威电子书请登录
!
RTSM
RTSM(实时系统模型)是对整个芯片系统在指令集层面上的仿真,它能提供快速、准确的指令仿真,以及与RealViewDebugger的无缝连接。
大型应用程序的开发可以使用RTSM模拟技术来完成。
RTSM模拟包括LCD显示器、键盘和鼠标等外设的仿真。
不到5s,就可以利用PC在ARM处理器上对OS的启动过程进行模拟,用户可以在ARM提供的RTSM上进行快速的软件仿真。
这是OEM在开发软件系统时成本最低的方法。
想象一下,芯片公司不用等到芯片生产出来,也不用把缓慢的FPGA板交给方案厂商或OEM;只需要将整个芯片的模型交付,下游厂家就可以尽早尽快地将软件方案开发完毕。
最终产品几乎可以从芯片生产出来就准备上市。
1.2器件选型
器件的选择归根结底是为嵌入式系统选择合适的处理器芯片。
ARM处理器是最常见的嵌入式处理器之一,它以低功耗、低成本和高性能而深受业界的青睐。
而且ARM是目前产业中资源最为广泛的嵌入式处理器,基于广大的ARM合作伙伴计划,开发者可以在这个联盟里寻求到各种自己意想不到的帮助。
从图2给出了常见的ARM处理器的架构和支持的操作系统。
目前在业内广为人知的ARM处理器主要有ARM7系列和ARM9系列,同时为了关注今后嵌入式系统的发展,也有必要了解一下最新的ARM11和ARMCotex系列处理器。
硬件工程师必读攻略----如何通过仿真有效提高数模混合设计性能(上)
7/28
获取更多权威电子书请登录
图2ARM体系结构
ARM7系列
ARM7TDMI是ARM7系列中使用最广泛的,它是从最早实现32位地址空间编程模式的ARM6内核发展而来的,并增加了64位乘法指令,支持片上调试、16位Thumb指令集和EmbeddedICE观察点硬件。
ARM7TDMI属于ARMv4体系结构,采用冯诺伊曼结构,3级流水处理,平均0.9DMIPs/Mhz性能。
不过ARM7TDMI没有MMU(MemoryManagementUnit)和Cache,所以仅支持那些不需要MMU和Cahce的小型实时操作系统,如VxWorks、uC/OS-II和uLinux等RTOS。
其他的ARM7系列内核还有ARM720T和ARM7E-S等。
ARM9系列
ARM9TDMI相比ARM7TDMI,将流水级数提高到5级从而增加了处理器的
硬件工程师必读攻略----如何通过仿真有效提高数模混合设计性能(上)
8/28
获取更多权威电子书请登录
时钟频率,并使用指令和数据存储器分开的哈佛结构以改善CPI和提高处理器性能,平均可达1.1DMIPs/Mhz,但是ARM9TDMI仍属于ARMv4T体系结构。
在ARM9TDMI基础上又有ARM920T、ARM940T和ARM922T,其中ARM940T增加了MPU(MemoryProtectUnit)和Cache;ARM920T和ARM922T加入了MMU、Cache和ETM9(方便进行CPU实时trace),从而更好的支持象Linux和WinCE这样的多线程、多任务操作系统。
ARM9E系列
ARM9E系列属于ARMv5TE,在ARM9TDMI的基础上增加了DSP扩展指令,是可综合内核,主要有ARM968E-S、ARM966E-S、ARM946E-S和
ARM926EJ-S(v5TEJ指令体系,增加了Java指令扩展),其中ARM926EJ-S是最具代表性的。
通过DSP和Java的指令扩展,可获得70%的DSP处理能力和8x的Java处理性能提升。
另外分开的指令和数据Cache结构进一步提升了软件性能;指令和数据TCM(TightlyCoupleMemory:
紧耦合存储器)接口支持零等待访问存储器;双AMBAAHB总线接口等。
ARM926EJ-S可达250Mhz以上的处理速度,很好地支持SymbianOS、Linux、WindowsCE和PalmOS等主流操作系统。
ARM11系列
ARM11系列主要有ARM1136、ARM1156、ARM1176和ARM11MP-Core等,它们都是v6体系结构,相比v5系列增加了SIMD多媒体指令,获得1.75x多媒体处理能力的提升。
另外,除了ARM1136外,其他的处理器都支持AMBA3.0-AXI总线。
ARM11系列内核最高的处理速度可达500Mhz以上(其中90nm
硬件工程师必读攻略----如何通过仿真有效提高数模混合设计性能(上)
9/28
获取更多权威电子书请登录
工艺下,ARM1176可达到
750Mhz)以及600DMIPS的性能,请参考和图3相关描述。
图3ARM11系列内核
基于ARMv6架构的ARM11系列处理器是根据下一代的消费类电子、无线设备、网络应用和汽车电子产品等需求而制定的。
其的媒体处理能力和低功耗特点使它特别适合于无线和消费类电子产品;其高数据吞吐量和高性能的结合非常适合网络处理应用;另外,在实时性能和浮点处理等方面ARM11可以满足汽车电子应用的需求。
ARMCotex系列
Cortex系列是ARM公司目前最新内核系列,属于v7架构,主要有
Cortex-A8、Cortex-R4、Cortex-M3和Cortex-M1等处理器,其中A8是面向高性能的应用处理器,最高可达1Ghz的处理速度,更好的支持多媒体及其他高性能要求,最高可达2000DMIPS;R4主要面向嵌入式实时应用领域(Real-Time),7级流水结构,相对于上代ARM1156内核,R4在性能、功耗和面积(PPA:
Performance,PowerandArea)取得更好的平衡,>1.5DMIPS/Mhz和高于400Mhz的处理速度。
而M3主要是面向低成本和高性能的MCU应用领域,相比ARM7TDMI,M3面积更小,功耗更低,性能更高。
Cortex-M3处理器的核心
硬件工程师必读攻略----如何通过仿真有效提高数模混合设计性能(上)
10/28
获取更多权威电子书请登录
是基于哈佛架构的3级流水线内核,该内核集成了分支预测,单周期乘法,硬件除法等众多功能强大的特性,使其在Dhrystonebenchmark上具有出色的表现(1.25DMIPS/MHz)。
根据Dhrystonebenchmark的测评结果,采用新的Thumb®-2指令集架构的Cortex-M3处理器,与执行Thumb指令的
ARM7TDMI-S®处理器相比,每兆赫的效率提高了70%,与执行ARM指令的ARM7TDMI-S处理器相比,效率提高了35%。
目前已经有Cortex系列内嵌的产品问世,如TI公司推出的基于Cortex-A8内核的OMAP3430,TI、ST和Luminary也推出了基于Cortex-M3内核的低成本高性能32位MCU,更多详情请登陆这些公司的主页查询。
2工具选择
根据开发目标平台的不同,ARM提供不同的工具解决方案。
MDK-ARM
RealViewMicrocontrollerDevelopmentKit(MDK)支持基于ARM7,
ARM9,Cortex-M3微控制处理器,例如Atmel,Freescale,Luminary,NXP,OKI,Samsung,Sharp,ST,TI等厂家的产品。
MDK提供工业标准的编译工具和强大的调试支持。
MDK是专为MCU的用户开发嵌入式软件而设计的一套开发工具。
包括根据器件定制的调试仿真支持,丰富的项目模版,固件示例以及为内存优化的RTOS库。
MDK上手容易,功能强大,适合微控制器应用程序开发。
RVDS
硬件工程师必读攻略----如何通过仿真有效提高数模混合设计性能(上)
11/28
获取更多权威电子书请登录
正如前面所介绍RVDS是专为SOC,FPGA以及ASIC用户开发复杂嵌入式应用程序或者和操作系统平台组件接口而设计的开发工具。
RVDS支持器件设计,支持多核调试,支持基于所有ARM
和Cortex系列CPU的程序开发。
RVDS还可以和第三方软件进行很好的连接。
图4RVDS和RV-MDK
如上图表示:
MDK主要是为终端客户提供价格低廉,功能强大的开发工具。
集成了RealView编译工具,KeiluVision开发环境,支持基于
ARM7,ARM9,Cortex-M1,Cortex-M3产品的仿真,提供非常高效的RTOS
Kernel,除此,提供的Real-Time库还有TCP/IP网络套件,Flash文件系统,USB器件接口,CAN总线接口等,方便终端用户进行应用开发。
因此对于MDK用户来说,他们得到的就是可以对MCU进行仿真和调试,容易使用又没有冗余的功能,关键是价格实惠,而且用户可以先试用再购买。
对于芯片设计公司以及相关解决方案提供商来说,需要的是更加强大的工具,可以进行多核调试,需要更加先进的调试和分析功能,可以支持多种操作系
硬件工程师必读攻略----如何通过仿真有效提高数模混合设计性能(上)
12/28
获取更多权威电子书请登录
统,可以进行IP整合开发,可以结合ESL工具进行架构评估,系统软硬件划分等,那么选择RVDS可以提供完整解决方案。
3编译和连接
ARMRealView编译工具已经发展了16年,一直致力于为客户提供最好的编译器。
RVDS是ARM公司继SDT与ADS1.2之后主推的新一代开发工具,目前最高版本是3.1。
它由RealView编译器(RVCT)、RealView汇编器(armasm)、RealView连接器(armlinker),以及RealView调试器
(RVDebugger)三部分组成。
RVDS对代码密度的提升、代码执行速度的提高,都可以由ARM开发工具自动实现,而不需要软件开发人员花费过多的时间手动优化高级语言代码。
这是RVDS的优势所在。
先前版本中的编译器armcc,tcc,armcpp,tcpp已经整合成一个编译器armcc,可以将标准的C或C++语言源程序编译成32位ARM指令代码或者16位Thumb指令代码或者Thumb-2指令代码。
编译器输出的ELF格式的目标文件,包含调试信息。
除此之外,编译器可以输出所生成的汇编语言列表文件。
RVDS的编译器根据最新的ARM架构进行特别的优化,针对每个ARM架构都提供最好的代码执行性能,最优的代码密度。
可以根据需要选择调试信息级别,以及不同的代码优化方向和优化级别。
RVCT中C和RogueWaveC++库包括
硬件工程师必读攻略----如何通过仿真有效提高数模混合设计性能(上)
13/28
获取更多权威电子书请登录
!
完整ISO标准C语言库
标准C语言函数集,C语言库需要的支持函数以及在Semihosted执行环境中需要的目标相关的函数。
ARMC语言库结构使用户很容易定义目标相关函数,以适应特定的目标环境。
!
浮点函数库使用ARM在IEEE754标准(二进制浮点算法)上实现的浮点环
境。
!
RogueWaveC++库
RogueWaveC++库包含标准C++函数,编译器需要的支持函数。
各种源文件经过ARM编译器编译后生成ELF格式的目标文件。
这些目标文件和相应的C/C++运行时库经过ARM连接器处理后,生成ELF格式映像文件。
ARM连接器可以去除使用不到的代码段和函数,这样可以减少内存的使用。
ARM连接器可以将不同的指令代码和数据代码放置到不同的内存地址范围。
(
通常在嵌入式系统中,指令和数据代码会固化在非易失性存储器中(ROM或Flash),可以从这些地方上电启动。
从运行速度方面考虑,部分指令和数据代码会在启动后搬运到易失性存储器(RAM)中,因此连接器可以使用一些方法机制来配置调度。
这种分散装载(scatterloading)的机制可以让把不同的指令和数据分散的放到不同的地址,而且这些地址在系统启动和系统运行可以是不同的映射。
硬件工程师必读攻略----如何通过仿真有效提高数模混合设计性能(上)
14/28
获取更多权威电子书请登录
详细的地址分配可以是用参数来指定,或者用一个描述文件来作为连接器的参数。
使用描述文件会使维护起来非常简单,而且如果要改变地址分配,不需要把整个项目完全重新来做,只要把项目中需要的目标重新连接即可。
一个scatterloading文件的示例:
LOAD_FLASH0x040000000x80000;启动地址和长度
{
EXE_FLASH0x040000000x80000
{
init.o(Init,+First);
*(+RO);
}
32bitRAM0x00000x2000
{
vectors.o(Vect,+First);
int_handler.o(+RO)
}
16bitRAM0x20000x80000
{
*(+RW,+ZI);
}
}
硬件工程师必读攻略----如何通过仿真有效提高数模混合设计性能(上)
15/28
获取更多权威电子书请登录
!
本文件定义了启动区域和三个执行区域。
在大括号外面定义了启动区域
(LOAD_FLASH),里面三个定义了执行区域
(EXEC_FLASH,32bitRAM,16bitRAM)。
!
为了提高运行速度,异常向量(在vectors.s)和异常句柄(在
int_handler.c)被重新放置到32bitRAM的零地址开始的地方。
!
可以读写的变量被复制到16bitRAM的0x2000地址开始的地方。
!
零初始化的数据和可读写数据放在16bitRAM内。
!
其他不需要搬运的代码只需要还放在Flash里就好。
3.1RVCT的优化级别与优化方向
提到RVCT就不能不提armcc的四个优化级别和两个编译选项,-O1、-O2、-O3、-O4,以及-Otime、-Ospace。
-Ospace与-Otime负责给编译器提供代码优化的大方向,告知编译器编译任务的主要目标是代码密度(-Ospace)还是代码
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ARM 开发 工程师 入门 宝典