arm体系结构与开发流程_第1页
arm体系结构与开发流程_第2页
arm体系结构与开发流程_第3页
arm体系结构与开发流程_第4页
arm体系结构与开发流程_第5页
已阅读5页,还剩164页未读 继续免费阅读

下载本文档

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

文档简介

ARM体系结构与开发流程ARM体系结构与编程一嵌入式系统基本概念与发展历史..3二ARM体系结构版本与ARM处理器核..37三ARM结构图…………62四

编程模型………….79五操作系统………….147六开发环境………….159一、嵌入式系统基本概念与发展历史嵌入式计算机嵌入式系统的概念嵌入式系统的特点嵌入式系统的分类嵌入式系统的应用范围一.1嵌入式计算机嵌入式计算机的基本概念嵌入式计算机的基本特征和应用范围嵌入式计算机_基本概念传统的计算机分类是按照计算机的处理字长、体系结构、运算速度、结构规模、适用领域进行的,如通常所说的大型计算机、中型机、小型机和微型计算机,并以此标准来组织学科和产业分工,这种分类方法也沿袭了多年。随着近20年来微电子技术、计算机技术和移动通信技术的迅速发展以及网络技术的广泛应用,实际情况已经产生了根本性的变化。例如在70年代末定义的微型计算机演变出来的个人计算机PC其处理速度已远远超过了当年对大、中、小型计算机的定义。嵌入式计算机_基本概念随着计算机技术对其它行业的广泛渗透和与其它行业应用技术的相互结合,以应用为中心的分类方法变得似乎更加切合实际发展;也就是按计算机的嵌入式应用和非嵌入式应用将其分为通用计算机和嵌入式计算机。而通用计算机具有一般计算机的基本标准形态,通过装配不同的应用软件,以基本雷同的面目出现并应用在社会的各个方面,其典型产品为PC;嵌入式计算机_基本概念通用的台式机嵌入式计算机_基本概念而非通用计算机的计算机-嵌入式计算机,则是非通用计算机形态的计算机应用它是以作为嵌入式系统的核心部件的形式隐藏在各种装置、设备、产品和系统中。嵌入式计算机_基本概念后PC时代产品的蓬勃发展嵌入式计算机_基本概念后PC时代产品的蓬勃发展嵌入式计算机_基本特征和应用范围嵌入式计算机在应用数量上已远远超过了各种通用计算机,一台通用计算机的外设中就包含了多个嵌入式微处理器。键盘、鼠标、软驱、硬盘、显示卡、显示器、Modem、网卡、声卡、打印机、扫描仪、数码相机、USB集线器等都是由嵌入式处理器控制的。在制造工业、过程控制、通讯、仪器、仪表、汽车、船舶、航空、航天、军事装备、消费类产品等方面均是嵌入式计算机广泛应用的领域。一.2嵌入式系统的概念嵌入式系统是嵌入到对象体中的专用计算机系统以嵌入式计算机为核心的嵌入式系统是继IT网络技术之后,又一个新的技术发展方向。嵌入式系统的概念_IEEE的定义IEEE对嵌入式系统的定义为:嵌入式系统是“用于控制、监视或者辅助操作机器和设备的装置”(devicesusedtocontrol、monitor、orassisttheoperationofequipment、machineryorplants)这主要是从应用对象上加以定义,涵盖了软、硬件及辅助机械设备。嵌入式系统的概念_国内的定义国内普遍认同的嵌入式系统定义为:以应用为中心、以计算机技术为基础、软硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。相比较而言国内的定义更全面一些,体现了嵌入式系统“嵌入”、“专用性”、“计算机”的基本要素和特征。一.3嵌入式系统的特点由于嵌入式系统是应用于特定环境下,针对特定用途来设计的系统,所以不同于通用计算机系统。同样是计算机系统,嵌入式系统是针对具体应用设计的“专用系统”。它的硬件和软件都必须高效率地设计、“量体裁衣”、去除冗余,力争在较少的资源上实现更高的性能。它与通用的计算机系统相比具有以下显著特点:一.3嵌入式系统的特点

(嵌入式系统与PC之间的区别)嵌入式系统一般是专用系统,而PC是通用计算平台嵌入式系统的资源比PC少得多嵌入式系统软件故障带来的后果比PC机大得多嵌入式系统一般采用实时操作系统嵌入式系统大都有成本、功耗的要求嵌入式系统得到多种微处理体系的支持嵌入式系统需要专用的开发工具一.4嵌入式系统的分类按表现形式分(硬件范畴)芯片级嵌入(含程序或算法的处理器)模块级嵌入(系统中的某个核心模块)系统级嵌入一.4嵌入式系统的分类按实时性要求分(软件范畴):非实时系统(PDA)软实时系统(消费类产品)硬实时系统(工业和军工系统)一.5嵌入式系统的应用领域

嵌入式技术无处不在崭新的数字世界多彩的嵌入式应用嵌入式技术无处不在文字处理、日常管理和生产控制的计算机各种使用嵌入式技术的品种繁多的电子产品,如:MP3、PDA、手机、智能玩具,网络家电、智能家电、车载电子设备等在工业和服务领域中,大量嵌入式技术也已经应用于工业控制、数控机床、智能工具、工业机器人、服务机器人等各个行业,正在逐渐改变着传统的工业生产和服务方式消费电子嵌入式应用信息家电智能玩具军事电子通信设备移动存贮工控设备智能仪表汽车电子网络设备工业军事国防电子商务网络嵌入式技术无处不在电话的发展电话

无晶体管BTDECT1千万个晶体管

3个处理器诺基亚手机

超过7亿个晶体管

(多数用于存储器)

5-6个处理器1940 2001 2002计算机的发展AppleMacintosh

黑白显示器

1MIP处理器惠普-康柏掌上电脑

彩色显示

200MIP处理器64MB内存

…袖珍型AcornArchimedes

彩色显示器

10MIP处理器

…RISC集+=日用电器的发展AppleIPOD

100张CDs

袖珍型四处理器HP1315

照片质量彩色打印机双处理器GameBoyAdvance

手持式彩色联网型双处理器嵌入式控制和计算机的芯片使用量比较(个)Source:SemicoResearchCorp2002

嵌入式产品拥有璀璨的明天LotsofEmbeddedCoreShipments(32bitandabove)2003TotalEmbeddedCore*:1.48billionunitsSource:SemicoResearchCorp,Q12004782.8M126.2M119M88.3M*IncludesallSoCfor32-bit,64-bitandgreaterRISCandCISCarchitectures46.9M314M2004ARMEstimated:1.3billion嵌入式技术将成为后PC时代的主宰嵌入式技术成为当前微电子技术与计算机技术中的一个重要分支。以嵌入式计算机为核心的嵌入式系统是继IT网络技术之后,又一个新的技术发展方向。使计算机的分类从以前的巨型机、大型机、小型机、微机之分变为了通用计算机和嵌入式系统两大分类;嵌入式的应用更是涉及金融、航天、电信、网络、信息家电、医疗、工业控制、军事等各个领域,并日益广泛。嵌入式技术将成为后PC时代的主宰。

后PC时代产品的蓬勃发展嵌入式系统的应用领域消费类电子—智能玩具、手持通讯的核心嵌入式系统的应用领域汽车电子嵌入式系统的应用领域二ARM体系结构与ARM处理器核本章将对ARM技术进行全面论述,通过本章的学习,使大家对ARM技术有个全面的了解和掌握,建立起以ARM技术为基础的嵌入式系统应用技术基础。

二ARM体系结构与ARM处理器核二、1ARM简述第一片ARM处理器是1983年10月到1985年4月间在位于英国剑桥的AcornComputer公司开发1990年11月ARM公司在英国剑桥的一个谷仓里成立,最初只有12人。现在约千余人,其中大部分从事研发工作,ARM公司在全世界许多地区设有分公司,包括中国台湾。

ARM拥有广泛的全球技术合作伙伴,其中包括领先的半导体系统厂商、实时操作系统开发商、电子设计自动化和工具供应商、应用软件公司、芯片制造商和设计中心。ARM公司既不生产芯片也不销售芯片,它只出售芯片技术授权。ARM合作伙伴包括了许多世界顶级的半导体公司。目前5大半导体公司全都使用了ARM公司的技术授权,前10中有9家,前25中有23家。ARM技术具有很高的性能和功效,因而容易被厂商接受。同时,合作伙伴的增多,可获得的第三方工具、制造和软件支持,又使整个系统成本降低,使产品进入市场的时间加快,从而具有更大的竞争优势。二ARM体系结构与ARM处理器核二、2ARM芯片的特点

1.ARM芯片具有RSIC体系的一般特点,如具有大量的寄存器;绝大多数操作都在寄存器中进行

,通过Load/Store的体系结构在内存和寄存器传递数据。寻址方式简单。采用固定长度的指令格式。

2.此外,ARM体系采用了一些特别的技术,在保证高性能的同时尽量减小芯片的体积,减底芯片的功耗。这些技术有在同一条数据处理指令中包含算术逻辑处理和移位处理使用地址自动增加(减少)来优化程序中的循环处理。Load/Store指令可以批量传输数据,从而提高数据传输的效率。所有指令都可以根据前面指令执行结果,决定是否执行,以提高指令执行的效率。

二ARM体系结构与ARM处理器核二.3ARM体系结构版本V1版本1,本版本包括下列指令:

乘法指令之外的基本数据处理指令;基于字节,字和多字的存储器访问操作指令(Load/Store);子程序调用指令BL在内的跳转指令;完成系统调用的软件中断指令SWI。

二ARM体系结构与ARM处理器核二.3ARM体系结构版本V2版本2,与版本1相比版本2(2a)增加了下列指令:乘和乘加指令;支持协处理器的指令;对于FIQ模式,提供了额外的影子寄存器;SWP指令及SWPB指令。

二ARM体系结构与ARM处理器核二.3ARM体系结构版本V3-版本3较以前的版本发生了大的变化地址空间扩展到了32位,但除了版本3G外的其他版本是向前兼容的,也支持26位的地址空间;分开的当前程序状态寄存器CPSR(CurrentProgramStatusRegister)和备份的程序状态寄存器SPSR(SavedProgramStatusRegister),SPSR用于在程序异常中断时保存被中断的程序状态;增加了两种异常模式,使操作系统代码可以方便地使用数据访问中止异常、指令预取中止异常和未定义指令异常;增加了MRS指令和MSR指令用于完成对CPSR和SPSR寄存器的读写。修改了原来的从异常中返回的指令。二ARM体系结构与ARM处理器核二.3ARM体系结构版本V4版本4。与版本3相比,版本4增加了下列指令

有符号、无符号的半字和有符号字节的load和store指令。增加了T变种,处理器可以工作于Thumb状态,在该状态下的指令集是16位的Thumb指令集。增加了处理器的特权模式。在该模式下,使用的是用户模式下的寄存器。

二ARM体系结构与ARM处理器核二.3ARM体系结构版本V5-版本5主要由两个变型版本5T、5TE组成相比与版本4,版本5的指令集有了如下的变化:提高了T变种中ARM/Thumb混合使用的效率。增加前导零记数(CLZ)指令,该指令可使整数除法和中断优先级排队操作更为有效;增加了BKPT(软件断点)指令;为协处理器设计提供了更多的可供选择的指令;更加严格地定义了乘法指令对条件码标志位的影响。二ARM体系结构与ARM处理器核二.3ARM体系结构版本V6-版本6是2001年发布的。新架构v6在降低耗电量的同时还强化了图形处理性能。通过追加有效进行多媒体处理的SIMD功能,将语音及图像的处理功能提高到了原机型的4倍。ARM体系版本6首先在2002年春季发布的ARM11处理器中使用。除此之外,v6还支持多微处理器内核。二ARM体系结构与ARM处理器核二.3ARM体系结构版本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处理器的核心是基于哈佛架构的3级流水线内核,该内核集成了分支预测,单周期乘法,硬件除法等众多功能强大的特性。二ARM体系结构与ARM处理器核ARM体系结构版本二ARM体系结构与ARM处理器核ARM处理器核ARM7系列ARM9系列ARM10E系列ARM11系列SecurCore系列StrongARM系列Xscale系列2.4.1ARM7系列核介绍

ARM7TDMI是ARM公司最早为业界普遍认可且得到了最为广泛应用的处理器核,特别是在手机和PDA中,随着ARM技术的发展,它已是目前最低端的ARM核。ARM7:32位ARM体系结构4T版本;T:“Thumb”16位压缩指令集;D:支持片上Debug(调试),使处理器能够停止以响应调试请求;M:增强型Multiplier,与前代相比具有较高的性能且产生64位的结果;I:“EmbeddedICE”硬件以支持片上断点和观察点ARM7系列核介绍1)ARM7TDMI组织结:ARM7TDMI重要的特性有实现ARM体系结构版本4T,支持64位结果的乘法,半字、有符号字节存取;支持Thumb指令集,可降低系统开销;32×8DSP乘法器;32位寻址空间-4GB线性地址空间;它包含了EmbeddedICE模块以支持嵌入式系统调试;调试硬件由JTAG测试访问端口访问,因此JTAG控制逻辑被认为是处理器核的一部分;广泛的ARM和第三方支持,并与ARM9Thumb系列ARM10Thumb系列和StrongARM处理器相兼容。ARM7系列核介绍

2)ARM7TDMI应用ARM7TDMI处理器核在存储器配置较简单的系统中广泛应用,最为成功的典型例子是手机、PDA,在此应用中,ARM7TDMI已成为用于控制和用户接口功能的事实上的标准处理器。当需要实现高性能时,具有简单存储器系统单纯的ARM7TDMI已不能满足,系统的复杂程度必然要增加。往往是在ARM7TDMI上增加Cache存储器、以ARMCPU核的形式增加软件从片外存储器读、写性能。

2.4.2ARM9系列核介绍ARM8核是从1993年到1996年开发的,并开发了具有片上Cache及存储器管理单元高性能ARMCPU芯片以满足比ARM7的3级流水线更高性能的ARM核的需求。ARM9TDMI将流水线的级数从ARM7TDMI的3级增加到5级,并使用分开的指令与数据存储器的Harvard体系结构。ARM9TDMI的性能在相同工艺条件下近似达到ARM7TDMI两倍ARM9系列核介绍

1)ARM9TDMI技术特点

支持Thumb指令集;含有EmbeddedICE模块支持片上调试;通过采用5级流水线以增加最高时钟速率;分开的指令与数据存储器端口以改善CPI,提高处理器性能。

ARM9系列核介绍

2)ARM9TDMI组织

ARM9内核采用了与后面要讲到的StrongARM相同的5级流水线。ARM9TDMI与StrongARM核的主要区别在于StrongARM有一个与寄存器读出级并行操作的专用的转移加法器进行转移地址计算,而ARM9TDMI使用数据路径中的ALU来计算转移目标地址。

ARM9系列核介绍3)Thumb解码和存储器读写

4)协处理器支持

5)片上调试

6)低电压操作

7)ARM9TDMI应用

8)ARM9E-S及ARM946E-S和ARM966E-S

2.4.3ARM10系列核ARM10TDMI属于ARM处理器核中的高端处理器核,ARM10TDMI的性能在相同工艺条件下近似达到也以ARM9TDMI的两倍性能工作。ARM1020E/ARM10200是基于ARM10TDMI核设计的高性能CPU核。增加最高时钟速率。降低CPI。

StrongARM和XScale系列核StrongARM的五级流水线

取指(从指令Cache)。指令译码及寄存器读;转移目标计算及执行。移位及ALU操作,包括数据传送的存储器地址计算。数据Cache访问结果写回到寄存器文件寄存器前推通路将中间结果传给下一条指令,以避免读后写冒险引起的寄存器互锁停顿。从下一条指令的取指级传送PC+4的PC通路给出当前指令的PC+8,作为r15并用于转移目标计算。

StrongARM和XScale系列核StrongARM处理器流水线的特点要在一个周期内完成寄存器控制的移位和基址加变址寻址存储操作,寄存器需要有三个读端口。要在一个周期内完成自动变址的装入(load)操作,寄存器需要两个写端口。执行级的地址增值器支持多装入(load)/存储(store)指令。有很多源可以产生下一个PC值。

StrongARM和XScale系列核IntelXScale系列处理器核是基于ARMv5TE体系结构的,它提供了从手持互联网设备到互联网基础设施产品全面解决方案,支持16位Thumb指令和DSP扩充。基于XScale技术开发的系列微处理器,由于超低功率与高性能的组合使IntelXScale适用于广泛的互联网接入设备2.4.5

SecurCore系列核SecurCore系列微处理器专为安全需要而设计,提供了完善的32位RISC技术的安全解决方案,因此,SecurCore系列微处理器除了具有ARM体系结构的低功耗、高性能的特点外,还具有其独特的优势,即提供了对安全解决方案的支持。

带有灵活的保护单元,以确保操作系统和应用数据的安全。采用软内核技术,防止外部对其进行扫描探测。可集成用户自己的安全特性和其他协处理器。

三ARM结构图ARM7ARM7内核结构图

ARM7TDMI内核的外围硬件接口信号图

ARM7芯片结构示例ARM9ARM9内部结构图——TCM紧耦合存储

ARM9内部结构图——MMU存储管理

ARM9芯片结构示例三ARM结构图ARM7ARM7内核结构图

ARM7TDMI内核的外围硬件接口信号图三ARM结构图ARM7ARM9三ARM结构图ARM7ARM9ARM7TDMI内核的外围硬件接口信号图三ARM结构图三ARM结构图ARM9ARM9内核结构图

ARM9内部结构图——TCM紧耦合存储

ARM9内部结构图——MMU存储管理

ARM9芯片结构示例ARM9内核结构图三ARM结构图三ARM结构图三ARM结构图ARM7ARM9三ARM结构图三ARM结构图四编程模型1指令系统2处理器工作状态、工作模式、内部寄存器…………………..1523ARM存储器接口及存储器层次

1674嵌入式应用软件开发的基本流程245指令系统介绍所有早期的ARM处理器核,直到ARM7TDMI,都是基于简单的取指―译码―执行流水线。从AcornComputers公司在80年代早期开发的最初的ARM1,直到今天在多数移动电话中使用的ARM7TDMI核,基本的操作原理几乎没变。ARM公司在第一个十年的开发工作都集中于下列几个方面:通过关键路径的优化和工艺尺寸的缩小来改善性能。通过静态CMOS逻辑、降低电源电压和代码压缩(Thumb指令集)实现低功耗应用。通过增加片上调试特性、片上总线和软件工具来支持系统开发。ARM7TDMI代表这个开发过程的顶点,在一个由PC和日益复杂的超标量、超流水线、高性能(也很高功耗)微处理器占优势的世界里,它的商业成功显示了原先非常简单的3级流水线的生命力。

在ARM开发的第二个十年里,在寻求高性能中出现了ARM组织的审慎多样化:向5级流水线迈出的第一步获得了双倍的性能(所有其它因素都相等),代价是在核中加入某些前推逻辑,以及双倍带宽存储器(例如在ARM8中)或分别的指令与数据存储器(例如在ARM9TDMI和StrongARM中)。在ARM10TDMI中取得的下一步性能加倍是相当艰难的。6级流水线与以前使用的5级流水线颇为相似,但是存储器访问的时间槽分配被扩展了,使存储器能够不用花费过多的功耗即可支持更高的时钟速率。处理器核还采用了更多的分隔:在取指单元,使转移能被预测并从指令流中去除,在数据存储器接口,使得当需要一些时间解决数据访问时(例如由于cache的失效)处理器能够继续执行。

性能的改善是通过增加时钟频率和降低CPI(每条指令的平均时钟数)来实现的。增加时钟速率通常需要流水线的级数增多,而这往往损失CPI,所以需要采取补救措施来挽回CPI的损失并进一步改善它。到现在,所有ARM处理器都是基于每个时钟周期至多发射一条指令的组织结构,而且总是按程序的顺序。ARM10TDMI和AMULET3处理器处理无序的实现,以便在数据读写速度较慢时保持指令流,这两种处理器也包括转移预测逻辑以减少在执行转移指令时对流水线的再填充。AMULET3消除了预测的转移指令的取指但仍然执行它;ARM10TDMI读取转移指令然而抑制了指令的执行。但是按照今天高端PC和工作站处理器的标准,这些仍然是很简单的机器。这种简单性在系统芯片的应用中有直接的好处,这种简单的处理器比复杂的处理器需要较少的晶体管,因而使用较小的芯片面积,消费较少的功耗。四编程模型1指令系统2处理器工作状态、工作模式、存储器结构3ARM存储器接口及存储器层次

4汇编程序设计5嵌入式应用软件开发的基本流程四.1

ARM指令集4.1.1ARM指令集概述4.1.2ARM寻址方式4.1.3ARM指令详细介绍4.1.4Thumb指令集4.1.5Thumb指令详细介绍4.1.1ARM指令集概述ARM指令集是32位的,程序的启动都是从ARM指令集开始。所有的ARM指令集都可以是有条件执行的。本节从以下三个方面介绍:1指令集编码

2条件执行

3指令分类及指令格式

4.1.1.1ARM指令集编码ARM指令集是以32位二进制编码的方式给出的,大部分的指令编码中定义了第一操作数、第二操作数、目的操作数、条件标志影响位以及每条指令所对应的不同功能实现的二进制位。每条32位ARM指令都具有不同的二进制编码方式,和不同的指令功能相对应。4.1.1.2条件执行

ARM指令根据CPSR中的条件位自动判断是否执行指令,在条件满足时,指令执行,否则指令被忽略。在ARM的指令编码表中,统一占用编码的最高四位[31:28]来表示“条件码”(即“cond”)。

ARM指令的基本格式如下:〈opcode〉{〈cond〉}{S}〈Rd〉,〈Rn〉{,〈operand2〉}

条件域表1条件码后缀标

志含

义0000EQZ置位相等0001NEZ清零不相等0010CSC置位无符号数大于或等于0011CCC清零无符号数小于0100MIN置位负数0101PLN清零正数或零0110VSV置位溢出0111VCV清零未溢出条件域表2条件码后缀标

志含

义1001LSC清零Z置位无符号数小于或等于1010GEN等于V带符号数大于或等于1011LTN不等于V带符号数小于1100GTZ清零且(N等于V)带符号数大于1101LEZ置位或(N不等于V)带符号数小于或等于1110AL忽略无条件执行4.1.1.3指令分类及指令格式

ARM指令集可以分为六大类,分别为数据处理指令、Load/Store指令、跳转指令、程序状态寄存器处理指令、协处理器指令和异常产生指令。

ARM指令使用的基本格式如下:〈opcode〉{〈cond〉}{S}〈Rd〉,〈Rn〉{,〈operand2〉}

指令格式中符号说明〈opcode〉{〈cond〉}{S}〈Rd〉,〈Rn〉{,〈operand2〉}

opcode

操作码;指令助记符,如LDR、STR等。cond

可选的条件码;执行条件,如EQ、NE等。S 可选后缀;若指定“S”,则根据指令执行结果更新CPSR中的条件码。Rd 目标寄存器。Rn

存放第1操作数的寄存器。operand2 第2个操作数4.1.1.4Thumb指令集概述

ARM开发工具完全支持Thumb指令,应用程序可以灵活的将ARM和Thumb子程序混合编程以便在例程的基础上提高性能或代码密度。在编写Thumb指令时,先要用伪指令CODE16声明(ADS的编译环境下),而且在ARM指令中要使用BX指令跳转到Thumb指令,以切换处理器状态。本节可以分为以下几个部分:4.1.1Thumb指令集编码4.1.2Thumb状态切换4.1.3编程模型4.1.4Thumb指令集特性4.1.1Thumb指令集编码Thumb指令集编码如下:4.1.1.4编程模型Thumb指令集是ARM指令集的一个子集,并只能对限定的ARM寄存器进行操作。其编程模型如下图所示:

r0r1r2r3r4r5r6r7r8r9r10r11r12SP(r13)LR(r14)PC(r15)Lo寄存器Hi寄存器CPSR有阴影的寄存器访问时受到限制4.1.1.4Thumb指令集特点

Thumb指令继承了ARM指令集的许多特点

Thumb指令也是采用Load/Store结构,有数据处理、数据传送及流控制指令等。

Thumb指令集丢弃了ARM指令集一些特性大多数Thumb指令是无条件执行的(除了转移指令B),而所有ARM指令都是条件执行的。许多Thumb数据处理指令采用2地址格式,即目的寄存器与一个源寄存器相同,而大多数ARM数据处理指令采用的是3地址格式(除了64位乘法指令外)。

Thumb异常时表现的一些特点所有异常都会使微处理器返回到ARM模式状态,并在ARM的编程模式中处理。由于ARM微处理器字传送地址必须可被4整除(即字对准),半字传送地址必须可被2整除(即半字对准)。而Thumb指令是2个字节长,而不是4个字节,所以,由Thumb执行状态进入异常时其自然偏移与ARM不同。

4.1.2ARM寻址方式4.1.2.1

立即寻址4.1.2.2

寄存器寻址4.1.2.3

寄存器间接寻址4.1.2.4

基址加偏址寻址4.1.2.5

堆栈寻址4.1.2.6

块拷贝寻址4.1.2.7

相对寻址4.1.2.1

立即寻址

立即寻址也叫立即数寻址,这是一种特殊的寻址方式,操作数本身就在指令中给出,只要取出指令也就取到了操作数,这个操作数被称为立即数,对应的寻址方式也就叫做立即寻址。例如以下指令:

ADD R0,R0,#1 /*R0←R0+1*/ADD R0,R0,#0x3f /*R0←R0+0x3f*/

在以上两条指令中,第二个源操作数即为立即数,要求以“#”为前缀,对于以十六进制表示的立即数,还要求在“#”后加上“0x”。4.1.2.2寄存器寻址寄存器寻址就是利用寄存器中的数值作为操作数,这种寻址方式是各类微处理器经常采用的一种方式,也是一种执行效率较高的寻址方式。以下指令:

ADD R0,R1,R2 /*R0←R1+R2*/

该指令的执行效果是将寄存器R1和R2的内容相加,其结果存放在寄存器R0中。寄存器寻址第二操作数为寄存器型的移位操作

在ARM指令的数据处理指令中参与操作的第二操作数为寄存器型时,在执行寄存器寻址操作时,可以选择是否对第二操作数进行移位,即Rm,{<shift>},其中Rm称为第二操作数寄存器,<shift>用来指定移位类型(LSL,LSR,ASL,ASR,ROR或RRX)和移位位数。移位位数可以是5位立即数(#<#shift>)或寄存器(Rs)。在指令执行时将移位后的内容作为第二操作数参与运算。例如指令:

ADDR3,R2,R1,LSR#2;R3<—R2+R1÷4寄存器寻址第二操作数移位方式

LSL:逻辑左移,空出的最低有效位用0填充。LSR:逻辑右移,空出的最高有效位用0填充。ASL:算术左移,由于左移空出的有效位用0填充,因此它与LSL同义。ASR:算术右移,算术移位的对象是带符号数,移位过程中必须保持操作数的符号不变。如果源操作数是正数,空出的最高有效位用0填充,如果是负数用1填充。ROR:循环右移,移出的字的最低有效位依次填入空出的最高有效位。RRX:带扩展的循环右移。将寄存器的内容循环右移1位,空位用原来C标志位填充。寄存器寻址寄存器寻址第二操作数的移位位数

移位位数可以用立即数方式或者寄存器方式给出,如下所示:ADDR3,R2,R1,LSR#2 ;R3<—R2+R1÷4ADDR3,R2,R1,LSRR4 ;R3<—R2+R1÷2R4寄存器R1的内容分别逻辑右移2位、R4位(亦即R1÷4、R1÷2R4),再与寄存器R2的内容相加,结果放入R3中。

4.1.2.3寄存器间接寻址

寄存器间接寻址就是以寄存器中的值作为操作数的地址,而操作数本身存放在存储器中。例如以下指令:

LDR R0,[R1] /*R0←[R1]*/STR R0,[R1] /*[R1]←R0*/

第一条指令将以R1的值为地址的存储器中的数据传送到R0中。第二条指令将R0的值传送到以R1的值为地址的存储器中。4.1.2.4基址加偏址寻址

基址变址寻址就是将寄存器(该寄存器一般称作基址寄存器)的内容与指令中给出的地址偏移量相加,从而得到一个操作数的有效地址。变址寻址方式常用于访问某基地址附近的地址单元。采用变址寻址方式的指令又可以分为以下几种形式:前变址模式:

LDRR0,[R1,#4] ;R0←[R1+4]自动变址模式:

LDRR0,[R1,#4]! ;R0←[R1+4]、R1←R1+4后变址模式:LDRR0,[R1],#4 ;R0←[R1]、R1←R1+4基址加偏址寻址 基址寄存器的地址偏移可以是一个立即数,也可以是另一个寄存器,并且在加到基址寄存器前还可以经过移位操作,如下所示:LDR

r0,[r1,r2];r0<—mem32[r1+r2]LDRr0,[r1,r2,LSL#2];r0<—[r1+r2*4]

但常用的是立即数偏移的形式,地址偏移为寄存器形式的指令很少使用。4.1.2.5堆栈寻址堆栈是一种数据结构,按先进后出(FirstInLastOut,FILO)的方式工作,使用一个称作堆栈指针的专用寄存器指示当前的操作位置,堆栈指针总是指向栈顶。当堆栈指针指向最后压入堆栈的数据时,称为满堆栈(FullStack),而当堆栈指针指向下一个将要放入数据的空位置时,称为空堆栈(EmptyStack)。即访问存储器时,存储器的地址向高地址方向生长,称为递增堆栈(ascendingstack)。存储器的地址向低地址方向生长,称为递减堆栈(descendingstack)。

堆栈寻址四种类型的堆栈工作方式

满递增堆栈:堆栈指针指向最后压入的数据,且由低地址向高地址生成。满递减堆栈:堆栈指针指向最后压入的数据,且由高地址向低地址生成。空递增堆栈:堆栈指针指向下一个将要放入数据的空位置,且由低地址向高地址生成。空递减堆栈:堆栈指针指向下一个将要放入数据的空位置,且由高地址向低地址生成4.1.2.6块拷贝寻址块拷贝寻址是多寄存器传送指令LDM/STM的寻址方式。LDM/STM指令可以把存储器中的一个数据块加载到多个寄存器中,也可以把多个寄存器中的内容保存到存储器中。寻址操作中的寄存器可以是R0-R15这16个寄存器的子集或是所有寄存器。LDM/STM指令依据其后缀名的不同其寻址的方式也有很大不同,见下表。4.1.2.7相对寻址

与基址变址寻址方式相类似,相对寻址以程序计数器PC的当前值为基地址,指令中的地址标号作为偏移量,将两者相加之后得到操作数的有效地址。以下程序段完成子程序的调用和返回,跳转指令BL采用了相对寻址方式:

BL NEXT ;跳转到子程序

NEXT处执行

……

NEXT …… MOV PC,LR ;从子程序返回

四.2处理器工作状态、工作模式、内部寄存器处理器状态

ARM7TDMI处理器内核使用V4T版本的ARM结构,该结构包含32位ARM指令集和Thumb指令集,因此ARM7TDMI处理器有两种操作状态:

ARM状态:32位,这种状态下执行的是字方式的ARM指令;Thumb状态:16位,这种状态下执行半字方式的Thumb指令。两个状态之间的切换并不影响处理器模式或寄存器内容。四.2处理器工作状态、工作模式、内部寄存器工作模式ARM体系结构支持7种处理器工作模式,分别为:用户模式、快中断模式、中断模式、管理模式、中止模式、未定义模式和系统模式。这样的好处是可以更好的支持操作系统并提高工作效率。四.2处理器工作状态、工作模式、内部寄存器工作模式工作模式说明旁注用户(usr)正常程序工作模式不能直接切换到其它模式系统(sys)用于支持操作系统的特权任务等与用户模式类似,但具有可以直接切换到其它模式的特权快中断(fiq)支持高速数据传输及通道处理快中断异常响应时进入此模式中断(irq)用于通用中断处理普通中断响应时进入此模式管理(svc)操作系统保护代码系统复位和软件中断响应时进入此模式中止(abt)用于支持虚拟内存和/或存储器保护在ARM7TDMI没有多大用处未定义(und)支持硬件协处理器的软件仿真未定义指令异常响应时进入此模式四.2处理器工作状态、工作模式、内部寄存器ARM状态下的寄存器组织在ARM7TDMI处理器内部有37个用户可见的寄存器。不同的工作模式和处理器状态下,程序员可以访问的寄存器也不尽相同。R0R1R2R3R4R5R6R7R8R9R10R11R12R15(PC)通用寄存器和程序计数器状态寄存器R14(LR)R14-svcR14-abtR14-undR14-irqR14-fiqCPSR无SPSR-svc系统管理中止未定义普通中断快速中断R13(SP)R13-svcR13-abtR13-undR13-irqR13-fiqR12-fiqR11-fiqR10-fiqR9-fiqR8-fiqSPSR-abtSPSR-undSPSR-irqSPSR-fiq用户异常模式

特权模式

ARM状态下的寄存器组织

模式

ARM状态下的寄存器组织1.ARM状态的寄存器简介2.ARM状态的通用寄存器3.ARM程序状态寄存器四.2处理器工作状态、工作模式、内部寄存器ARM程序状态寄存器条件码标志

控制位

最低8位I,F,T和M[4:0]位用做控制位。当异常出现时改变控制位。当处理器在特权模式下时也可以由软件改变。I&F中断禁止位

I=1则禁止IRQ中断;F=1则禁止FIQ中断。T位

T=0指示ARM执行;T=1指示Thumb执行。M模式位

M0,M1,M2,M3和M4(M[4:0])是模式位,这些位决定处理器的工作模式,如图2-4所示。注意,M[4:0]其他组合的结果是不可预知的。其他位NZCV..…….IFTM4M3M2M1M0M[4:0]0b100000b100010b100100b10011模式用户FIQIRQ管理0b101110b11011中止未定义0b11111系统模式位工作状态位1:Thumb0:ARMFIQ中断禁止位1:禁止0:允许IRQ中断禁止位1:禁止0:允许OverflowCarryZeroNegative图2-5程序状态寄存器条件码标志位保留位控制位ARM寄存器组成ARM寄存器组成概述ARM状态下的寄存器组织Thumb状态下的寄存器组织

Thumb状态下的寄存器组织Thumb状态下的寄存器组织概述Thumb状态和ARM状态下的寄存器关系Thumb状态下的寄存器组织概述Thumb状态下的寄存器集是ARM状态下寄存器集的子集。程序员可以直接访问8个通用的寄存器(R0~R7),程序计数器PC、堆栈指针SP、连接寄存器LR和当前状态寄存器CPSP。每一种特权模式都各有一组SP,LR和SPSR。图2-6为Thumb状态下寄存器组织图。图2-6Thumb状态下的寄存器组织R0R1R2R3R4R5R6R7R15(PC)R14(LR)R14-svcR14-abtR14-undR14-irqR14-fiqCPSR无SPSR-svc系统管理中止未定义普通中断快速中断R13(SP)R13-svcR13-abtR13-undR13-irqR13-fiqSPSR-abtSPSR-undSPSR-irqSPSR-fiq用户Thumb状态和ARM状态下的寄存器关系Thumb状态的R0~R7与ARM状态的R0~R7是一致的。Thumb状态的CPSR和SPSR与ARM状态的CPSR和SPSR是一致的。Thumb状态的SP映射到ARM状态的R13。Thumb状态的LR映射到ARM状态的R14。Thumb状态的PC映射到ARM状态的PC(R15)。高寄存器R8~R15并不是标准寄存器集的一部分,在使用它们时有一定的限制。四.3ARM存储器接口及存储器层次

ARM存储数据类型和存储格式ARM的存储器层次简介ARM存储数据类型和存储格式ARM支持的数据类型

ARM处理器支持以下6种数据类型:8位有符号和无符号字节。16位有符号和无符号半字,它们以两字节的边界定位。32位有符号和无符号字,它们以4字节的边界定位。较早的ARM处理器不支持半字和有符号字节)ARM存储数据类型和存储格式ARM存储数据类型和存储格式“小端”格式:较高的有效字节存放在较高的存储器地址,较低的有效字节存放在较低的存储器地址。“大端”格式:较高的有效字节存放在较低的存储器地址,较低的有效字节存放在较高的存储器地址。

ARM处理器能方便的配置为其中任何一种存储器方式,但它们的缺省设置为小端格式。在本书中我们将通篇采用“小端”格式,即较高的有效字节存放在较高存储器地址ARM的存储器层次简介寄存器组片上RAM/FLASH片上Cache主存储器

4.4嵌入式应用软件开发的基本流程

图1-7嵌入式软件开发流程图链接器命令文件编译预处理编译器汇编器Archive工具链接器和定位器头文件(*.h,*.hpp)可重定位目标文件库文件(*.a,*.lib)头文件(*.h,*.hpp)C/C++源代码汇编源代码源文件列表源文件列表源代码编辑阶段源文件编译阶段链接与重定位调试与下载阶段重定位文件表(*.o,*.a)共享目标文件(*.o,*.a)可执行映象(*.elf,*.coff)链接映射文件(*.map)设备程序员目标开发系统开发流程工程建立源文件编译调试固化C语言程序*.c汇编源程序*.s链接脚本文件*.ld命令脚本文件*.CS存储区映像文件*.map在系统级别的嵌入式开发中需要使用链接定位文件,该文件描述代码链接定位的有关信息,包括代码段,数据段,地址段等,链接器必须使用该文件对整个系统的代码做正确的定位,该文件称为链接脚本文件(*.ld)SECTIONS{ .=0x0C000000; Image_RO_Base=.;

.text

:{*(.text)}; Image_RO_Limit=.; Image_RW_Base=.;

.data:{*(.data)};

.rodata:{*(.rodata)}; Image_ZI_Base=.;

.bss:{*(.bss)}; Image_ZI_Limit=.; Image_RW_Limit=.; __bss_start__=.; __bss_end__=.; __EH_FRAME_BEGIN__=.; __EH_FRAME_END__=.;PROVIDE(__stack=.); end=.; _end=.; .debug_info 0:{*(.debug_info)} .debug_line 0:{*(.debug_line)} .debug_abbrev 0:{*(.debug_abbrev)} .debug_frame 0:{*(.debug_frame)}}赋当前地址,可能为RAM或Flash的访问地址只读区域基地址,启动程序中使用的符号代码段,在这里标识开始放置程序代码只读区域长度,启动程序中使用的符号读写区域基地址,启动程序中使用的符号数据段,程序中已初始化的全局变量放在该段只读数据段,程序中静态全局变量等固定值放在该段清零区域基地址,启动程序中使用的符号包含未初始化的全局可用数据,如未初始化全局变量清零区域长度,启动程序中使用的符号读写区域基长度,启动程序中使用的符号调试信息gcc库专用链接脚本文件及示例SECTIONS{

.=0x0C000000;Image_RO_Base=.;

.text

:{*(.text)};

Image_RO_Limit=.;

Image_RW_Base=.;

.data:{*(.data)};.rodata:{*(.rodata)};Image_ZI_Base=.;

.bss:{*(.bss)};Image_ZI_Limit=.;Image_RW_Limit=.;……SECTIONS{

.=0x00000000;

Image_RO_Base=.;

.text

:{*(.text)};.rodata:{*(.rodata)};

Image_RO_Limit=.;

.=0x0C000000;Image_RW_Base=.;

.data:{*(.data)};

Image_ZI_Base=.;

.bss:{*(.bss)};Image_ZI_Limit=.;Image_RW_Limit=.;……链接脚本文件比较在RAM中调试在Flash中固化RAM地址FLASH地址只读数据intA1;intA2=5;constintA3=10;

voidmain(){

intA4; registerintA5; A4=A3;}.text:{*(.text)};代码段,在这里标识从0开始放置程序代码

.rodata:{*(.rodata)};只读数据段,程序中静态全局变量等固定值放在该段.data:{*(.data)};数据段,程序中已初始化的全局变量放在该段.bss:{*(.bss)}; 包含未初始化的全局可用数据,如未初始化全局变量变量A1作为未初始化的变量将保存在

.bss

段中变量A2作为已初始化的变量将保存在

.data段中常量A3保存在只读数据断.rodata

段中main函数对应的代码保存在.text段中寄存器变量A5直接保存在ARM的一个寄存器中局部变量A4当程序执行到main函数时存放在main函数对应的函数栈中链接脚本与程序的对应链接标准函数库链接排列顺序为

-lm

-lc

-lgcc

-lgEmbestIDE附带的GNU标准函数库标准C函数库libc.a -lc标准数学函数库libm.a -lm标准函数库的支持库libg.a -lgGCC的支持库libgcc.a -lgcc函数库的支持模式ARM

Little-EndianARM

Little-Endian

InterworkARM

Big-EndianARM

Big-Endian

InterworkThumb

Little-EndianThumb

Little-Endian

InterworkThumb

Big-EndianThumb

Big-Endian

Interwork启动代码分析中断程序解析ARM编程特别是系统初始化代码的编写中通常需要实现中断的响应、解析跳转和返回等操作,以便支持上层应用程序的开发,而这往往是困扰初学者的一个难题。中断处理的编程实现需要深入了解ARM内核和处理器本身的中断特征,从而设计一种快速简便的中断处理机制。ARM微处理器会执行以下几步操作:

1)保存处理器当前状态、中断屏蔽位以及各条件标志位;

2)设置当前程序状态寄存器CPSR中相应的位;

3)将寄存器lr_mode设置成返回地址;

4)将程序计数器(PC)值设置成该异常中断的中断向量地址,从而跳转到相应的异常中断处理程序处执行。

ARM处理器内核会自动执行以上四步,程序计数器PC总是跳转到相应的固定地址。从异常中断处理程序中返回包括下面两个基本操作:

1)恢复被屏蔽的程序的处理器状态;

2)返回到发生异常中断的指令的下一条指令处继续执行。

解析程序的概念和作用

如前所述,ARM处理器响应中断的时候,总是从固定的地址开始的,而在高级语言环境下开发中断服务程序时,无法控制固定地址开始的跳转流程。为了使得上层应用程序与硬件中断跳转联系起来,需要编写一段中间的服务程序来进行连接。这样的服务程序常被称作中断解析程序。每个异常中断对应一个4字节的空间,正好放置一条跳转指令或者向PC寄存器赋值的数据访问指令。理论上可以通过这两种指令直接使得程序跳转到对应的中断处理程序中去。但实际上由于函数地址值为未知和其它一些问题,并不这么做。这里给出一种常用的中断跳转流程:

这个流程中的关键部分是中断向量表,为了让解析程序能找到向量表,应该将向量表的地址固定化(编程者自定义)。这样,整个跳转流程的所有程序地址都是固定的,当中断触发后,就可以自动运行。其中,只有向量表的内容是可变的,编程者只要在向量表中填入正确的目标地址值就可以了。这使得上层中断处理程序和底层硬件跳转有机地联系起来。

事例就可避免在应用程序中计算中断的跳转地址,并且可以很方便的选择不同的函数作为指定中断的服务程序。当然,在程序开发时要合理开辟好向量表,避免对向量表地址空间不必要的写操作。解析程序的扩展

众所周知,在ARM处理器中会包含很多中断源,通常会在ARM内核外面扩展一个中断控制器来管理各种原因产生的中断。比如,三星公司的S3C4510B处理器中的IRQ/FIQ类型的中断源可以有21个,S3C44B0X有26个。S3C2410X有56个这时候中断处理的原理还是一样的,无非是向量表更长,并且当一个中断触发以后,需要在解析程序里查询中断控制器的状态来确定具体的中断源,再根据中断源来读取向量表中的对应地址内容。其处理流程可用下图表示。

向量中断的处理

一些处理器在设计外扩的中断控制器时提供了一种叫做“向量中断”的中断跳转机制。这与扩展解析跳转流程有所不同,它不需要软件来识别具体的中断源,也就是不需要添加上图中的IRQ/FIQ服务程序,而完全由硬件自动跳转到对应的中断地址。其它跳转流程的原理都是一样的。这相当于扩展了ARM内核的硬件中断向量表,减小了中断响应延时。以S3C44B0X处理器的外部中断0为例,需要在其对应的硬件固定跳转地址0x00000020处添加指令:ldr

pc,=HandlerEINT,使得程序跳转到其服务程序HandlerEINT0处执行。

五操作系统操作系统简介常见的操作系统有:商用型:VxWorks、WindowsCE、Psos、PalmOS、OS-9、LynxOS、QNX、LYN免费型:linux、µC/OS-Ⅱ、eCos等在什么情况下需要操作系统:完全取决于软件的复杂程度操作系统在什么情况下需要操作系统?完全取决于软件的复杂程度嵌入式实时多任务操作系统的主要特征:一个是多任务,二是实时,三是基于优先级控制,所以用户需不需要使用实时多任务操作系统,也主要是考虑对这三个方面的需求。如果一个软件项目并行的功能模块比较多,定时处理的功能比较多,程序的执行需要判断很多条件参数和资源,这时候我们可以考虑利用RTOS的多任务能力同样,如果我们经常需要考虑某些代码之间执行的优先顺序,那么可以利用RTOS的基于优先级的控制能力操作系统以uc/osII为例简要介绍。µC/OS-Ⅱ简介

µC/OS-Ⅱ是一个真正的实时操作系统,采用可剥夺型内核,即它总是执行就绪条件下优先级最高的任务。为了简化系统的设计,µC/OS-Ⅱ规定所有任务的优先级必须不同,任务的优先级就唯一地标识了该任务的重要性及执行次序。µC/OS-Ⅱ实际上是一个实时操作系统内核,只包含任务调度、任务管理、时间管理、内存管理和任务间的通信与同步等基本功能。没有提供输入输出管理、文件系统、网络之类的额外服务。但是由于µC/OS-Ⅱ的可移植性和开源性,用户可以自己添加所需的各种服务。目前,已经出现了专门为µC/OS-Ⅱ开发文件系统、TCP/IP协议栈、用户显示接口等的第三方商家。64个任务

无限循环的函数

空闲任务OSTaskIdle()统计任务OSTaskStat()

1、任务管理uC/OS-II提供下列任务的管理的函数

OSTaskCreate()建立任务OSTaskDel()删除任务OSTaskDelReq()请求删除任务OSTaskChangePrio()改变任务的优先级OSTaskSuspend()挂起任务OSTaskResume()恢复任务OSTaskStkChk()堆栈检验OSTaskQuery()获得有关任务的信息2、内存管理ANSIC中,一般采用malloc()和free()这两个函数动态地分配和释放内存。这样,随着内存空间的不断分配与释放,就会把原来很大的一块连续内存区域逐渐地分割成许多非常小的但彼此之间又不相邻的内存块,这样就会产生内存碎片问题。为了消除了多次分配与释放内存所引起的内存碎片问题,µC/OS-Ⅱ把连续的大块内存按分区来管理。每个分区中都包含整数个大小相同的内存块,但不同分区之间内存块的大小可以不同。这样,用户在需要动态分配内存时,可选择一个适当的分区,按块来进行内存分配。释放内存时将该块放回它以前所属的分区,这样就能有效解决内存碎片问题。而且每次调用malloc()和free()分配和释放的都是整数倍的固定内存块长,这样执行时间就是确定的了。

3、时间管理

µC/OS-Ⅱ要求用户提供一个称为时钟节拍的定时中断,以实现延时与超时控制等功能。该中断每秒发生10至100次,时钟节拍的实际频率是由用户控制的。任务申请延时或超时控制的计时基准就是该时钟节拍。该时钟节拍同时还是任务调度的时间基准。µC/OS-Ⅱ提供了与时钟节拍相关的系统服务,允许任务延时一定数量的时钟节拍或按时、分、秒、毫秒进行延时。uC/OS-II提供如下的时间管理函数OSTimeDly()任务延时函数OSTimeDlyHMSM()按时、分、秒延时函数OSTimeDlyResume()让处在延时期的任务结束延时OSTimeGet()获取系统时间OSTimeSet()设置系统时间4、任务间的通信与同步对于一个多任务操作系统来说,任务间的通信与同步必不可少的。µC/OS-Ⅱ提供了四种同步对象,分别是信号量、邮箱、消息队列和事件。通过邮箱和消息队列还可以进行任务间的通信。所有的同步对象都有相应的创建、等待、发送的函数。但这些对象一旦创建就不能删除,所以要避免创建过多的同步对象以节约系统资源。

µC/OS-Ⅱ的文件体系

µC/OS-Ⅱ的文件体系结构如下图所示,包括以下三个部分,应用软件层是基于µC/OS-Ⅱ的代码。应用软件核心代码(处理器无关)

OS_CORE.C OS_MBOX.C OS_MEM.C OS_Q.C OS_SEM.C OS_TASK.C OS_TIME.C uCOS_II.H设置代码(应用相关)

OS_CFG.H INCLUDES.H

核心代码

消息队列

存储管理

消息管理信号量任务调度定时管理OS_CPU.H OS_CPU_A.ASM OS_CPU_C.C

1、核心代码部分(与处理器无关)2、设置代码部分(与应用相关)3、处理器相关的移植代码部分六开发环境常见的嵌入式开发环境嵌入式开发环境的组成嵌入式开发环境的调试通道基于EmbestIDEforARM环境的软件开发实例

常见的嵌入式开发环境ADS/SDTIDE开发环境:它由ARM公司开发,使用了CodeWarrior公司的编译器;集成了GNU开发工具的IDE开发环境::它由GNU的汇编器as、交叉编译器gcc、和链接器ld等组成。嵌入式开发环境组成交叉开发环境作为嵌入式系统应用的ARM处理器,其应用软件的开发属跨平台开发,因此需要一个交叉开发环境。交叉开发是指在一台通用计算机上进行软件的编辑编译,然后下载到嵌入式设备中进行运行调试的开发方式。用来开发的通用计算机可以选用比较常见的PC机、工作站等,运行通用的Windows或Unix操作系统。开发计算机一般称宿主机,嵌入式设备称为目标机,在宿主机上编译好的程序,下载到目标机上运行,交叉开发环境提供调试工具对目标机上运行的程序进行调试。交叉开发环境一般由运行于宿主机上的交叉开发软件(最少必须包含编译调试模块)、宿主机到目标机的调试通道组成。运行于宿主机上的交叉开发软件最少必须包含编译调试模块,其编译器为交叉编译器。作为宿主机的一般为基于x86体系的桌上型计算机,而编译出的代码必须在ARM体系结构的目标机上运行,这就是所谓的交叉编译了。在宿主机上编译好目标代码后,通过宿主机到目标机的调试通道将代码下载到目标机,然后由运行于宿主机的调试软件控制代码在目标机上运行调试。为了方便调试开发,交叉开发软件一般为一个整合编辑、编译汇编链接、调试、工程管理及函数库等功能模块的集成开发环境IDE(IntegratedDevelopmentEnvironment)。组成ARM交叉开发环境的宿主机到目标机的调试通道一般有以下三种:

基于JTAG的ICD(In-CircuitDebugger)。

Angel调试监控软件。

在线仿真器ICE(In-CircuitEmulator)。

JTAG的ICD也称为JTAG仿真器,是通过ARM芯片的JTAG边界扫描口进行调试的设备。JTAG仿真器通过ARM处理器的JTAG调试接口与目标机通信,通过并口或串口、网口、USB口与宿主机通信。JTAG仿真器比较便宜,连接比较方便。通过现有的JTAG边界扫描口与

ARMCPU核通信,属于完全非插入式(即不使用片上资源)调试,它无需目标存储器,不占用目标系统的任何应用端口。通过JTAG方式可以完成:读出/写入CPU的寄存器,访问控制ARM

处理器内核。

读出/写入内存,访问系统中的存储器。

访问I/O系统

控制程序单步执行和实时执行

实时地设置基于指令地址值或者基于数据值的断点。基于JTAG仿真器的调试是目前ARM开发中采用最多的一种方式。

基于EmbestIDEforARM环境的软件开发实例

6.1ARM汇编语言的伪操作、宏指令与伪指令6.1.1

两种常见的ARM编译开发环境6.1.2ADS编译环境下的伪操作和宏指令6.1.3GNU编译环境下的伪操作和宏指令6.1.4ARM汇编语言的伪指令

6.1.1两种常见的ARM编译开发环境ADS/SDTIDE开发环境:它由ARM公司开发,使用了CodeWarrior公司的编译器;集成了GNU开发工具的IDE开发环境::它由GNU的汇编器as、交叉编译器gcc、和链接器ld等组成。ARM汇编语言中语句一般由以下几个部分组成:指令伪操作宏指令伪指令伪操作:是

温馨提示

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

评论

0/150

提交评论