嵌入式系统原理与接口技术_第1页
嵌入式系统原理与接口技术_第2页
嵌入式系统原理与接口技术_第3页
嵌入式系统原理与接口技术_第4页
嵌入式系统原理与接口技术_第5页
已阅读5页,还剩230页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

1、1 嵌入式系统原理与接口技术嵌入式系统原理与接口技术 山东大学计算机科学与技术学院贾智平2005-7-272内容简介 以目前流行的ARM嵌入式微处理器、嵌入式Linux作为主要内容,从嵌入式系统基本原理、系统设计,到抽象出研究嵌入式系统的技术途径进行了较深入阐述。其内容包括了嵌入式处理器原理、汇编语言、系统设计与软件开发、计算机接口技术与应用等方面的知识,并通过实例讲解嵌入式系统设计过程和原理。3章节安排章节安排第1章:嵌入式系统的基础知识第2章:ARM处理器技术第3章:ARM指令集Thumb指令集第4章:ARM汇编程序设计技术第5章:介绍实用的外围接口设计与开发技术第6章:介绍嵌入式系统的设

2、计流程和设计方法第7章:介绍基于S3C44B0X的嵌入式实验开发系统4第第 1 章章 嵌入式系统概述嵌入式系统概述本章主要内容:嵌入式系统的概念、发展、特点、组成、分类 嵌入式微处理器系列嵌入式系统中信息表示与运算基础 评估嵌入式系统处理器的主要指标嵌入式系统的应用5 嵌入式系统的概念嵌入式系统的概念第一种,根据IEEE(国际电气和电子工程师协会)的定义: 嵌入式系统是“用于控制、监视或者辅助操作机器和设备的装置”(原文为devices used to control, monitor, or assist the operation of equipment, machinery or pl

3、ants)。第二种,嵌入式系统是以应用为中心、以计算机技术为基础、软件硬件可裁剪、功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。 6 嵌入式系统的发展史嵌入式系统的发展史n第一阶段是以单芯片为核心的可编程控制器形式的系统;n第二阶段是以嵌入式CPU为基础、以简单操作系统为核心的嵌入式系统;n第三阶段是以嵌入式操作系统为标志的嵌入式系统;n第四阶段是以Internet为标志的嵌入式系统 。7 嵌嵌入式系统的特点入式系统的特点n通常是面向特定应用的;n空间和各种资源相对不足,必须高效率地设计,量体裁衣、去除冗余; n产品升级换代和具体产品同步,具有较长的生命周期; n软件一般都固化在存储

4、器芯片或单片机本身; n不具备自举开发能力 ,必须有一套开发工具和环境才能进行开发8 嵌嵌入式系统的分类入式系统的分类 根据嵌入式系统的复杂程度,可以将嵌入式系统分为以下4类 :单个微处理器 。常用的嵌入式处理器如Philips的89LPCxxx系列,Motorola的MC68HC05、08系列等。 嵌入式处理器可扩展的系统 。过程控制、信号放大器、位置传感器及阀门传动器。 复杂的嵌入式系统。开关装置、控制器、电话交换机、电梯、数据采集系统、医药监视系统、诊断及实时控制系统等 。在制造或过程控制中使用的计算机系统 。自动仓储系统和自动发货系统 9 嵌入式处理器嵌入式处理器10 嵌入式系统的组成

5、嵌入式系统的组成1.嵌入式系统的硬件 11 嵌入式系统的组成嵌入式系统的组成2. 嵌入式系统的软件嵌入式操作系统 通常包括与硬件相关的底层驱动软件、系统内核、设备驱动接口、通信协议、图形界面、标准化浏览器等。具有编码体积小,面向应用,可裁剪和移植,实时性强,可靠性高,专用性强等特点。相应的各种应用程序 12 嵌入式系统的组成嵌入式系统的组成3嵌入式系统的开发工具和开发系统 开发工具一般用于开发主机,包括语言编译器、连接定位器、调试器等。 v注意:嵌入式系统的硬件和软件位于嵌入式系统产品本身,开发工具则独立于嵌入式系统产品之外 。13计算机中数的表示计算机中数的表示带符号数与无符号数 一般用最高

6、有效位来表示数的符号,正数用0表示,负数用1来表示。原码、补码和反码 原码表示的数比较直观。8位二进制原码表示的数的范围是-127+127,16位二进制原码表示的数的范围是-32767+32767 正数的补码仍与原码相同,一个负数的补码,最高有效位为1,其余几位按原码各位求反,最末位加1 正数的反码表示与原码相同,负数的反码表示为该数的原码除符号位外按位取反 。 14 非数值数据编码非数值数据编码非数值数据是指不能进行算术运算的数据。一般包括字符、汉字、声音等。 字符编码。字符包括大小写英文字母、数字、运算符、标点符号等 ,最常用的是ASCII码。汉字编码 。汉字的内码是计算机内部处理和存储汉

7、字时使用的代码。GB231280国家标准信息交换用汉字编码(简称国标码)。语音编码。语音信号是模拟信号,语音的编解码就是将语音的模拟信号转换为二进制数字信号在计算机中处理、传输,到了接收端,再将数字信号还原为模拟语音。15 差错控制编码差错控制编码n基本思想:在发送端被传送的信息码序列的基础上,加入若干“监督码元”后进行传输,这些码元与原来的信息码序列之间存在着某种确定的约束关系。在接收数据时,检验信息码元与监督码元之间的既定的约束关系。n几种常用的差错控制编码:奇偶校验码海明码 循环冗余校验码16 评估嵌入式系统处理器的主要指标评估嵌入式系统处理器的主要指标n要先明确预期最终应用程序在待选平

8、台上的运行情况和测试目的,然后再挑选符合要求的特定测试向量。MIPS测试基准。测试方法是计算在单位时间内各类指令的平均执行条数,单位:MIPS。Dhrystone。测试基准是一个简单的C语言程序。EEMBC验证实验室研究指出,Dhrystone不适于作为嵌入式系统的测试向量。虽然它是市面上最普遍适用的测试向量,但它有许多漏洞。EEMBC。基于每秒钟算法执行的次数和编译代码大小的统计结果 。一次详尽的分析需要仔细衡量的因素包括:性能分析、功耗和效率分析、开发工具支持以及价格 17 嵌入式系统的应用嵌入式系统的应用嵌入式移动数据库;嵌入式系统在智能家居网络中的应用;嵌入式语音芯片;基于小范围无线通

9、信协议的嵌入式产品;其它工控和仿真领域 。18 第第 2 2 章章 ARMARM微处理器硬件结构微处理器硬件结构 本章主要内容:计算机体系结构分类ARM版本及系列ARM处理器结构存储系统机制19 计算机体系结构计算机体系结构1.冯诺依曼结构20 计算机体系结构计算机体系结构2. 哈佛体系结构 21 ARM简介简介 ARM(Advanced RISC Machines)系列微处理器,采用的ARM技术知识产权(IP)核都是由ARM公司提供的。 ARM公司本身不生产芯片,转让设计许可,由合作公司生产各具特色的芯片。 ARM32位体系结构目前被公认为是嵌入式应用领域领先的32位嵌入式RISC微处理器结

10、构。从版本1到版本6,ARM体系的指令集功能不断扩大。 22ARM处理器系列处理器系列ARM7系列ARM9系列ARM9E系列ARM10E系列SecurCore系列Inter的XscaleInter的StrongARM23 ARM处理器结构处理器结构从一下四个方面介绍:ARM和Thumb状态 RISC技术流水线技术超标量执行 24 ARM和和Thumb状态状态 V4版以后有:32位ARM指令集16位Thumb指令集,功能是ARM指令集的功能子集。ARM7TDMI核以后,T变种的ARM微处理器有两种工作状态:ARM状态Thumb状态。25 ARM与与Thumb状态转换状态转换 在程序的执行过程中,

11、微处理器可以随时在两种工作状态之间切换,并且该转变不影响处理器的工作模式和相应寄存器中的内容。 进入Thumb状态:当操作数寄存器的状态位(位0)为1时,执行BX指令。 进入ARM状态:当操作数寄存器的状态位(位0)为0时,执行BX指令。26 RISC技术技术 RISC体系结构基本特点:大多数指令只需要执行简单和基本的功能,其执行过程在一个机器周期内完成。只保留加载/存储指令。操作数由加载/存储指令从存储器取出放寄存器内操作。芯片逻辑不采用或少采用微码技术,而采用硬布线逻辑。减少指令数和寻址方式。 指令格式固定,指令译码简化。优化编译。 27 RISC技术技术ARM体系结构还采用了一些特别的技

12、术:所有的指令都可根据前面的执行结果决定是否被执行,提高了指令的执行效率。可用Load/Store指令批量传输数据,以提高数据的传输效率。可在一条数据处理指令中同时完成逻辑处理和移位处理。28 流水线技术流水线技术1ARM的3级流水线 29 流水线技术流水线技术多周期ARM指令的3级流水线操作 30 流水线技术流水线技术2ARM的流水线设计问题 (1)缩短程序执行时间: 提高时钟频率fclk减少每条指令的平均时钟周期数CPI (2)解决流水线相关:结构相关 数据相关 控制相关 31 流水线技术流水线技术3ARM的5级流水线 ARM9和StrongARM架构都采用了5级流水线.增加了I-Cach

13、e和D-Cache,把存储器的取指与数据存取分开;增加了数据写回的专门通路和寄存器; 把指令的执行过程分割为5部分: 取指-指令译码-执行-数据缓存-写回 32 超标量执行超标量执行 通过重复设置多套指令执行部件,同时处理并完成多条指令,实现并行操作,来达到提高处理速度的目的。所有ARM内核,包括流行的ARM7、ARM9和ARM11等,都是单周期指令机。ARM公司下一代处理器将是每周期能处理多重指令的超标量机。 但是,超标量处理器在执行的过程中必须动态地检查指令相关性如果代码中有分支指令。33 存储器部件的分类存储器部件的分类 n按在系统中的地位分类: “主存储器”(Main Memory,

14、简称内存或主存) “辅助存储器”(Auxiliary Memory,Secondary Memory,简称辅存或外存) n按存储介质分类:磁存储器(Magnetic Memory),半导体集成电路存储器(通常称为半导体存储器),光存储器(Optical Memory),激光光盘存储器(Laser Optical Disk)n按信息存取方式分类:随机存取存储器RAM只读存储器ROM 34 存储器的组织和结构存储器的组织和结构 n嵌入式存储器一般采用存储密度较大的存储器芯片,典型的嵌入式存储器系统由ROM、RAM、EPROM等组成。 35存储器的性能存储器的性能 大容量、高速度、低价格是评价存储器

15、性能的三个主要指标,也是存储体系设计的主要目标。 容量:SwWlm。其中W为存储体的字长(单位为位或字节),l为单个存储体的字数,m为并行工作的存储体个数。 速度:m个存储体并行工作时,可达到的最大频率宽度为BmWmTM 。其中TM是连续起动一个存储器所必要的时间间隔,TMTA。Bm是连续提供数据的速率。价格:具有SM位的存储器,每位价格表示为c=CSm。其中C是总价格。36 存储体系的组成存储体系的组成单体单字存储器单体多字存储器 多体单字交叉存取存储器多体多字交叉存取存储器一般把这些能并行读出多个CPU字的单体多字和多体单字及多体多字的交叉存取系统,统称为并行主存系统。 37 存储体系的形

16、式存储体系的形式 (a)两级存储器层次结构 (b)三级存储器层次结构 38 总线结构总线结构n1.总线协议 :四周期握手协议 39 总线结构总线结构n2.总线读写 40 总线结构总线结构3总线的时序图41 总线结构总线结构4直接内存访问(DMA) 42 总线结构总线结构5系统总线配置 多总线系统43 ARM存储数据类型存储数据类型ARM处理器支持以下六种数据类型: 8位有符号和无符号字节。16位有符号和无符号半字,以2字节的边界对齐。32位有符号和无符号字,以4字节的边界对齐。44 ARM存储格式存储格式 大端存储模式 小端存储模式(缺省)45 存储器接口存储器接口1.存储周期的基本类型:空闲

17、周期非顺序周期顺序周期协处理器寄存器传送周期 46 存储器接口存储器接口2.ARM的总线接口信号分成4类(以ARM7TDMI为例说明):时钟和时钟控制信号:MCLK、ECLK、nRESET、nWAIT。地址类信号:A31.0、nRW、MAS1.0、nOPC、nTRANS、LOCK、TBIT。存储器请求信号:nMREQ、SEQ。数据时序信号:D31.0、DIN31.0、DOUT31.0、ABORT、BL3.0。47 存储器接口存储器接口3. ARM的总线接口可以实现4种不同类型的总线周期。48 高速缓冲存储器高速缓冲存储器1.分类:统一Cache VS 独立的数据/程序Cache写通cache

18、VS 写回cache读操作分配cache VS 写操作分配cache49 高速缓冲存储器高速缓冲存储器2.工作原理:50 高速缓冲存储器高速缓冲存储器3.地址映像和变换方式:全相联地址映像和变换组相联地址映像和变换直接映像和变换 51 高速缓冲存储器高速缓冲存储器4.Cache的替换算法:轮转法随机替换算法 52 存储管理单元存储管理单元MMU1.在ARM系统中,存储管理单元MMU主要完成工作:虚拟存储空间到物理存储空间的映射。在ARM中采用了页式虚拟存储管理。存储器访问权限的控制。 设置虚拟存储空间的缓冲的特性。53 存储管理单元存储管理单元MMU (1)2.存储访问过程使能MMU时存储访问

19、过程 :54 存储管理单元存储管理单元MMU (2)禁止MMU时存储访问过程: 先要确定芯片是否支持cache和write buffer。如果芯片规定当禁止MMU时禁止cache和write buffer,则存储访问将不考虑C和B控制位。如果芯片规定当禁止MMU时可以使能cache和write buffer,则数据访问时,C=0,B=0;指令读取时,如果使用分开的TLB,那么C=1,如果使用统一的TLB,那么C=0。 存储访问不进行权限控制,MMU也不会产生存储访问中止信号。 所有的物理地址和虚拟地址相等,即使用平板存储模式。55 存储管理单元存储管理单元MMU (1)3. MMU中的地址变换

20、过程:通过两级页表实现。a)一级页表中包含有以段为单位的地址变换条目以及指向二级页表的指针。一级页表是实现的地址映射粒度较大。以段为单位的地址变换过程只需要一级页表。b)二级页表中包含有以大页和小页为单位的地址变换条目。有一种类型的二级页表还包含有以极小页为单位的地址变换条目。以页为单位的地址变换过程需要二级页表。 56 存储管理单元存储管理单元MMU (2)一级页表的地址变换过程 :57 存储管理单元存储管理单元MMU (1)4.一级描述符: 从页表中得到的相应地址变换条目称为一级描述符。它定义了与之相应的1M存储空间是如何映射的。一级描述符的位1:0定义了该一级描述符的类型,共有4种格式的

21、一级描述符: 58 存储管理单元存储管理单元MMU (2)1)粗粒度页表描述符:当一级描述符的位1.0为0b01(0b代表二进制)时,该一级描述符中包含了粗粒度的二级页表的物理地址,这种一级描述符称为粗粒度页表描述符。它的格式和各个字段的含义如下: 59 存储管理单元存储管理单元MMU (3)由粗粒度页表描述符获取二级描述符的过程 :60 存储管理单元存储管理单元MMU (4)2)段描述符:当一级描述符的位1:0为0b10时,该一级描述符为段描述符,它的格式和各个字段的含义如下:61 存储管理单元存储管理单元MMU (5)基于段的地址变换过程 :62 存储管理单元存储管理单元MMU (6)3)

22、细粒度页表描述符:当一级描述符的位1:0为0b11时,该一级描述符中包含了细粒度的二级页表的物理地址,称为细粒度页表描述符。它的格式和各个字段的含义如下:63 存储管理单元存储管理单元MMU (7)由细粒度页表描述符获取二级描述符的过程 64 存储管理单元存储管理单元MMU 5.MMU中的存储访问权限控制65 存储管理单元存储管理单元MMU 6. MMU中的域(Domain) MMU中的域指的是一些段、大页或者小页的集合。ARM支持最多16个域,每个域的访问控制特性都是由CP15中的寄存器C3中的两位来控制的。这两位的字段编码和含义: 66 存储管理单元存储管理单元MMU 7.快速上下文切换技

23、术 快速上下文切换技术FCSE(Fast Context Switch Extension)通过修改系统中不同进程的虚拟地址,避免在进行进程间切换时造成的虚拟地址到物理地址的重映射,从而提高系统的性能。 FCSE位于CPU和MMU之间,其责任就是将不同进程使用的相同虚拟地址映射为不同的虚拟空间,使得在上下文切换时无需重建TLB等。67 存储管理单元存储管理单元MMU 8.存储器映射的输入/输出 在ARM系统中,I/O操作通常被映射成存储器操作,即输入/输出是通过存储器映射的可寻址外围寄存器和中断输入的组合来实现的。 但是,对于存储器映射的I/O空间的操作,不能使用Cache技术。68第第 3

24、3 章章 ARMARM寻址方式与指令系统寻址方式与指令系统本章主要内容:ARM编程模型 ARM指令格式和寻址方式ARM指令集 Thumb指令集 69 机器指令、伪指令和宏指令机器指令、伪指令和宏指令 机器指令能被处理器直接执行,而伪指令宏和宏指令不能。机器指令包括ARM指令集和Thumb指令集 ;伪指令是在源程序汇编期间,由汇编编译器处理。其作用是为汇编程序完成准备工作;宏指令在程序中用于调用宏,宏是一段独立的程序代码;在程序汇编时,对宏调用进行展开,用宏体代替宏指令。70 ARM处理器模式处理器模式n除用户模式之外的其余6种称为非用户模式,或特权模式(Privileged Modes);而特

25、权模式中,除系统模式之外的其余5种又称为异常模式(Exception Modes),不同的工作模式间可以相互切换。 工作模式功能M4:0用户模式(usr)正常的程序执行状态10000快速中断模式(fiq)用于高速数据传输或通道处理10001外部中断模式(irq)用于通用的中断处理10010管理模式(svc)操作系统的保护模式10011中止模式(abt)用于虚拟存储及存储保护10111未定义指令模式(und)用于支持硬件协处理器的软件仿真11011系统模式(sys)运行特权级的操作系统任务1111171 处理器的工作状态处理器的工作状态ARM状态:处理器执行32位的arm指令集时,工作在此状态;

26、Thumb状态:处理器执行16位的thumb指令集时,工作在此状态。 72 ARM的寄存器组织的寄存器组织73 ARM的寄存器组织的寄存器组织 1.通用寄存器:包括R0R15,以及程序计数器PC .R0R7称为不分组寄存器;R8R12有两组物理寄存器。一组属于快速模式(R8_fiqR12_fiq),另一组属于其它模式(R8_usrR12_usr) ;R13和R14有6组物理寄存器。其中用户模式和系统模式共用一组 。寄存器R13通常作为堆栈指针(SP) ,寄存器R14常用作连接寄存器(LR);寄存器R15,又称为PC 74 ARM的寄存器组织的寄存器组织 (1)2.状态寄存器:当前程序状态寄存器

27、 CPSR,可以在任何工作模式下被访问;程序状态备份寄存器SPSR,只有在异常模式下,才能被访问 ; 75 ARM的寄存器组织的寄存器组织 (2)条件标志位标志位含 义N当两个补码表示的带符号数运算时,N=1 表示运算的结果为负数;N=0 表示运算的结果为正数或零;ZZ=1 表示运算的结果为零;Z=0表示运算的结果不为零;C有3种情况会改变C的值:加法运算(包括比较指令CMN):当运算结果产生了进位时(无符号数上溢出),C=1,否则C=0。减法运算(包括比较指令CMP):当运算时产生了借位(无符号数下溢出),C=0,否则C=1。对于包含移位操作的非加/减运算指令,C为移出值的最后一位。V对于加

28、/减法运算指令,当操作数和运算结果为二进制的补码表示的带符号数时,V=1表示符号位溢出。Q在ARM v5及以上版本的E系列处理器中,用Q标志位指示增强的DSP运算指令是否发生了溢出。76 ARM的寄存器组织的寄存器组织 (3)控制位标志位含义II1,表示禁止IRQ中断;否则,表示允许IRQ中断FF1,表示禁止FIQ中断;否则,表示允许FIQ中断T对于ARM v4以上版本的T系列处理器,T0,表示执行ARM指令,否则,表示执行Thumb指令;对于ARM v5以上版本的非T系列处理器,T0,表示指令ARM指令,否则,表示强制下一条执行的指令产生未定义指令中断。M4:0M4:0处理器工作模式可访问的

29、寄存器10000用户模式PC,R0R14,CPSR10001快速中断模式PC,R0R7,R8_fiqR14_fiq,CPSR,SPSR_fiq10010外部中断模式PC,R0R12,R13_irqR14_irq,CPSR,SPSR_irq10011管理模式PC,R0R12,R13_svcR14_svc,CPSR,SPSR_svc10111中止模式PC,R0R12,R13_abtR14_abt,CPSR,SPSR_abt11011未定义指令模式PC,R0R12,R13_undR14_und,CPSR,SPSR_und11111系统模式PC,R0R14,CPSR77 异常中断异常中断n异常中断是指

30、处理器由于外部或内部的原因,停止执行当前任务,转而处理特定的事件,处理完后返回原程序,继续执行。 异常类型工作模式特定地址(低端)特定地址(高端)优先级复位管理模式0 x000000000 xFFFF00001未定义指令未定义指令中止模式0 x000000040 xFFFF00046软件中断(SWI)管理模式0 x000000080 xFFFF00086指令预取中止中止模式0 x0000000C0 xFFFF000C5数据访问中止中止模式0 x000000100 xFFFF00102外部中断请求(IRQ)外部中断模式0 x000000180 xFFFF00184快速中断请求(FIQ)快速中断模

31、式0 x0000001C0 xFFFF001C378 异常中断异常中断(1)n例子: 1.整个地址空间的起始位置(地址0 x00000000开始)有以下指令,一旦发生外部中断请求,处理器首先自动保存当前状态(PC-R14,CPSR-SPSR),进入外部中断模式,接着执行地址0 x00000018处的指令,即b IRQ_SVC_HANDLER跳转到标号IRQ_SVC_HANDLER处开始执行。 bSYS_RST_HANDLER;对0 x00000000bUDF_INS_HANDLER;0 x00000004bSWI_SVC_HANDLER;应0 x00000008bINS_ABT_HANDLER

32、;0 x0000000cbDAT_ABT_HANDLER;地0 x00000010b.;bIRQ_SVC_HANDLER;址0 x00000018bFIQ_SVC_HANDLER;0 x0000001c 79 异常中断异常中断(2) 2. IRQ_SVC_HANDLER处的代码为: IRQ_SVC_HANDLERsub lr, lr, #4stmfdsp!, r0-r3, lrldr r0, =IRQ_SVC_Vectorldr pc, r0 处理器将通用寄存器和返回地址压入堆栈,接着跳转 到 外 部 中 断 请 求 的 中 断 服 务 程 序 中 。IRQ_SVC_Vector为外部中断请求

33、的中断向量。80 ARM指令的编码格式指令的编码格式 3128272524212019161512110cond opcodeSRnRdop20000001010010001000000000000001081 ARM指令的助记符指令的助记符 ARM指令在汇编程序中用助记符表示,一般ARM指令的助记符格式为: S , 其中: 操作码,如ADD表示算术加操作指令; 决定指令执行的条件域;S 决定指令执行是否影响CPSR寄存器的值; 目的寄存器; 第一个操作数,为寄存器; 第二个操作数。82 条件域条件域condCPSR中标志位含 义EQZ置位相等NEZ清零不相等CSC置位无符号数大于或等于CCC

34、清零无符号数小于MIN置位负数PLN清零正数或零VSV置位溢出VCV清零未溢出HIC置位Z清零无符号数大于LSC清零Z置位无符号数小于或等于GEN等于V带符号数大于或等于LTN不等于V带符号数小于GTZ清零且(N等于V)带符号数大于LEZ置位或(N不等于V)带符号数小于或等于AL忽略无条件执行83 寻址方式寻址方式 立即数寻址寄存器寻址寄存器移位寻址寄存器间接寻址 基址变址寻址相对寻址 多寄存器寻址 块拷贝寻址 堆栈寻址 84例:寄存器移位寻址例:寄存器移位寻址LSL逻辑左移 :Rx,LSL LSR逻辑右移 : Rx,LSR ASR算术右移 :Rx,ASR ROR循环右移 :Rx,ROR RR

35、X带扩展的循环右移:Rx,RRX 85ARM指令集指令集数据处理指令;跳转指令;Load/Store指令;程序状态寄存器指令;协处理器指令;软件中断指令 86Thumb指令集指令集nThumb指令集可以看作是ARM指令集的一个子集,Thumb指令长度为16位,但Thumb指令集中的数据处理指令的操作数仍然是32位的,指令寻址地址也是32位的。 nThumb指令集由四大类构成:数据处理指令;跳转指令;Load/Store指令;和软件中断指令87第第 4 4 章章 汇编语言程序设计汇编语言程序设计 本章主要内容:汇编语言源程序格式汇编语言上机过程汇编语言与C语言混合编程技术Linux下的ARM汇编

36、 程序优化与性能测试88 ARM源程序文件源程序文件 文件类型扩展名汇编语言源文件.sC语言源文件.cC+源文件.cpp引入文件.INC头文件.h89 汇编源程序示例汇编源程序示例 90 汇编源程序示例汇编源程序示例91 汇编源程序示例汇编源程序示例92 汇编源程序示例汇编源程序示例nARM的汇编语言程序一般由几个段组成,每个段均由AREA伪操作定义。n段可以分为多种,如代码段、数据段、通用段,每个段又有不同的属性,象代码段的默认属性为READONLY,数据段的默认属性为READWRITE。n本程序定义了两个段,第一个段为代码段codesec,它在存储器中存放用于程序执行的代码以及main函数

37、的本地字符串;第二个段为数据段constdatasec,存放了全局的字符串,由于本程序没有对数据进行写操作,该数据段定义属性为READONLY。93 汇编语言的行构成汇编语言的行构成格式:n 标签标签 指令指令/ /伪操作伪操作/ /伪指令伪指令 操作数操作数 ; ;语句的注释语句的注释 所有的标签必须在一行的开头顶格写,前面不能留空格,后面也不能跟C语言中的标签一样加上“:”; ARM汇编器对标识符的大小写敏感书写标号及指令时字母的大小写要一致;注释使用“;”符号,注释的内容从“;”开始到该行的结尾结束。94 汇编语言的行构成汇编语言的行构成n标签 标签是一个符号,可以代表指令的地址、变量、

38、数据的地址和常量。一般以字母开头,由字母、数字、下划线组成。当符号代表地址时又称标号,可以以数字开头,其作用范围为当前段或者在下一个ROUT伪操作之前。n指令/伪操作 指令/伪操作是指令的助记符或者定义符,它告诉ARM的处理器应该执行什么样的操作或者告诉汇编程序伪指令语句的伪操作功能。95 汇编语言的汇编语言的标号标号n标号代表地址。标号分为段内标号和和段外标号。段内标号的地址值在汇编时确定,段外编号的地址值在链接时确定 。n在程序段中,标号代表其所在位置与段首地址的偏移量。根据程序计数器(PC)和偏移量计算地址即程序相对寻址。n在映像中定义的标号代表标号到映像首地址的偏移量。映像的首地址通常

39、被赋予一个寄存器,根据该寄存器值与偏移量计算地址即寄存器相对寻址。n此外在宏中也可以使用局部符号。局部标号是099的十进位数开始,可以重复定义。 局部标号引用格式: F|BA|T Nroutname 96 汇编语言的汇编语言的常量常量 程序中的常量是指其值在程序的运行过程中不能被改变的量。数字常量:数字常量有3种表示方式:十进制数,如1、2、123十六进制数,如 0 x123,0 xabc n进制数,形式为n_XXX,n的范围是2到9,XXX是具体数字字符常量:由单引号及中间的字符组成,包括C语言中的转义字符,如a,n字符串常量:由一对双引号及中间的字符串表示,中间 也 可 以 使 用 C 语

40、 言 中 的 转 义 字 符 , 比 如 :“abcdef0 xarn”逻辑常量:TRUE,FALSE,注意带大括号97 汇编程序的变量代换汇编程序的变量代换 这里所说的变量,是相对于汇编程序的“变量”,是用于汇编程序进行处理的,但一旦编译到程序中,则不会改变,成为常量。如果在字符串变量的前面有一个$字符,在汇编时编译器将用该字符串变量的内容代替该串变量。如果在数字变量前面有一个代换操作符“$”,编译器会将该数字变量的值转换为十六进制的字符串,并用该十六进制的字符串代换“$”后的数字变量。如果需要将“$”字符 加入到字符串中,可以用“$”代替,此时编译器将不再进行变量代换,而是把“$”看作一个

41、“$”.一般的,在两个“|”之间的“$”并不进行变量的代换,但如果“|”在双引号内,则将进行变量代换。使用“.”来表示字符串中变量名的结束。98 汇编程序的变量代换汇编程序的变量代换99 伪伪指令指令n在ARM汇编语言源程序中有些特殊助记符,它们没有相对应的操作码或者机器码,通常称为伪指令,它们所完成的操作称为伪操作。伪指令在源程序中的作用是为完成汇编程序作各种准备工作的,由汇编程序在源程序的汇编期间进行处理,仅在汇编过程中起作用。符号定义伪指令数据定义伪指令汇编控制伪指令信息报告伪指令宏指令以及其他伪指令。100汇编语言上机过程汇编语言上机过程 用ARM汇编语言编写的源程序,要使之运行必须经

42、过以下几个步骤:1.编辑汇编源程序,保存为文件名后缀是“.s”的文件;2.调用汇编程序对源程序进行汇编,生成目标文件;3.连接目标文件,生成可以放进ARM软件仿真器进行调试的映象文件或者可下载到ARM的目标板执行的二进制文件;4.对生成的最终文件进行调试。101 ARM的开发工具的开发工具ADS1.2 ADS1.2是ARM公司推出的一套ARM汇编、C、C+的集成开发环境。包含了几个有用的开发工具,包括:CodeWarrior IDE for the ARM Developer Suite :为ARM的程序员管理、开发软件工程项目提供了一个简单直观、灵活的用户界面。 AXD Debuger:AX

43、D是一个功能强大、使用方便的调试器。 102 编辑汇编语言源程序编辑汇编语言源程序 n可以使用简单的Windows自带的记事本程序来编辑ARM的汇编程序: 单击开始菜单程序附件记事本 敲入汇编代码保存为.s文件 n也可以使用CodeWarrior IDE来编辑汇编程序: 单击File菜单的New菜单项 单击Project标签页 单击工具栏的New Text按钮 敲入汇编代码保存为hello.s文件 单击Project菜单,选择“Add *.s to project” 103 编译汇编语言源程序编译汇编语言源程序nARM的编译器有如下几种armcc:ARM C编译器,具有优化功能,兼容ANSI

44、Ctcc:Thumb的C编译器,同样具有优化功能兼容ANSI C。armcpp:ARM C+编译器,遵循ANSI C+或者EC+标准tcpp:Thubm的C+编译器,遵循ANSI C+或者EC+标准armasm:支持ARM和Thumb的汇编器 这些编译器输出的是ELF格式的目标文件,可以包括RAWF2格式的调试信息。同时通过特殊的控制选项可以输出汇编语言文件或者列表文件。104 编译汇编语言源程序编译汇编语言源程序n4种ARM C和C+编译器(armcc,tcc, armcpp和 tcpp)的命令通用语法: compiler PCS-options source-language search

45、-paths preprocessor-options output-format target-options debug-options code-generation-options warning-options additional-checks error-options source -via filename 用户通过命令行操作选项指引编译器运行。所有的选项都是以符号”-”开始,有些选项后面还跟有参数。在大多数情况下,ARM C和 C+编译器允许在选项和参数之间存在空格。 105 编译汇编语言源程序编译汇编语言源程序 PCS-options:指定了要使用的过程调用标准;sour

46、ce-language:指定了编译器可以接受的编写源程序的语言种类。对于C编译器默认的语言是ANSI C,对于C+编译器默认是ISO标准C+;search-paths:该选项指定了对包含的文件(包括源文件和头文件)的搜索路径;preprocessor-options:该选项指定了预处理器的行为,其中包括预处理器的输出和宏定义等特性;output-format:该选项指定了编译器的输出格式,可以使用该项生成汇编语言输出列表文件和目标文件;target-options:该选项指定目标处理器或ARM体系结构;debug-options:该选项指定调试信息表是否生成,和该调试信息表生成时的格式;106

47、 编译汇编语言源程序编译汇编语言源程序code-generation-options:该选项指定了例如优化,字节顺序和由编译器产生的数据对齐格式等选项;warning-options:该选项决定警告信息是否产生;additional-checks:该选项指定了几个能用于源码的附加检查,例如检查数据流异常,检查没有使用的声明等;error-options:该选项可以关闭指定的可恢复的错误,或者将一些指定的错误降级为警告;source:该选项提供了包含有C或C+源代码的一个或多个文件名,默认的,编译器在当前路径寻找源文件和创建输出文件。如果源文件是用汇编语言编写的(也就是说该文件的文件名是以.s作

48、为扩展名),汇编器将被调用来处理这些源文件。-via filename :WINDOWS系统对命令行的长度有限制,可以通过filename的文件读取命令行选项。用户可以对-via进行嵌套调用,在文件filename中再通过-via filename2包含了另外一个文件。 107连接装配汇编程序连接装配汇编程序 n使用armlink程序对ARM的汇编源程序进行连接,它也可以将多个.o目标文件连接生成最终的可执行文件。n术语 :映像文件(image):是指一个可执行文件,在执行的时候被加载到处理器中。一个映像文件可以有多个线程。它是ELF(Executable and linking format

49、)格式的。 段(Section):描述映像文件的代码或数据块。RO:Read-only缩写。RW:是Read-write缩写。ZI:是Zero-initialized缩写。108 连接装配汇编程序连接装配汇编程序Read Only Position Independent(ROPI):只读数据中代码和的地址在运行时候可以改变。Read Write Position Independent(RWPI):一个段中的可读/写的数据地址在运行期间可以改变。输入段(input section):它包含着代码,初始化数据或描述了在应用程序运行之前必须要初始化为0的一段内存。输出段(output secti

50、on):它包含了一系列具有相同的RO,RW或ZI属性的输入段。 域(Regions):在一个映像文件中,一个域包含了1至3个输出段。多个域组织在一起,就构成了最终的映像文件。 加载时地址:映像文件载入存储器时的地址。运行时地址:映像文件运行时的地址。109汇编程序的运行汇编程序的运行 生成的*.axf文件是ARM 的ELF 格式的可执行映像文件;这个文件可以载入AXD 进行仿真调试。使用armsd在终端模拟它在ARM目标机上的运行 :执行armsd -exec *.axf 直接在CodeWarrior IDE中运行映象文件:在project窗口中点击run按钮。在AXD上调试成功之后,我们可以

51、通过fromelf 工具将ELF 文件转换为二进制格式文件下载到目标板执行。转化的命令如下: fromelf *.axf -bin *110 汇编程序的调试汇编程序的调试n使用AXD进行调试 :编译、连接成功之后,我们可以点击project 窗口的debug按钮启动AXD进行调试:主框架窗口上方的调试工具栏有几个常用的按钮:go:使程序运行直到下一个断点停止step in:进入函数内部运行step:单步调试,每次移动一行step out :跳出循环或函数run to cursor:运行到光标所在的位置然后停止。111 汇编语言与汇编语言与C C语言混合编程技术语言混合编程技术nARM体系结构支

52、持ARM的汇编语言与C与C+的混合编程.一般的在一个完整的程序设计的中,除了初始化部分用汇编语言完成外,其大部分的编程任务一般都用C或C+完成。112 汇编程序中访问汇编程序中访问C C程序变量程序变量 在汇编的源程序中调用C语言风格的字符串需要使用IMPORT伪操作。IMPORT相当于C语言中的extern关键字,告诉编译器引用的符号不是在本文件中定义的,而是在其他的源文件中定义的。 IMPORT symbol ,WEAKsymbol是声明的符号的名称;,WEAK指示编译器如果发现symbol在所有的源文件中都没有找到,那么它也不会产生任何的错误信息。示例见下页。113 汇编程序中访问汇编程

53、序中访问C C程序变量程序变量C语言代码文件str.c,里面只有一个简单的字符串的定义char *strhello=Hello world!n0;汇编代码文件hello.s1 AREA |.text|, CODE, READONLY 2 main PROC3 STMFD sp!,lr4 LDR r0,strtemp5 LDRr0,r06 BL _printf7 LDMFD sp!,pc8 strtemp9 DCDstrhello10 ENDP11 EXPORT main12 IMPORT strhello13 IMPORT _main14 IMPORT _main15 IMPORT _prin

54、tf16 IMPORT |Lib$Request$armlib|, WEAK17 END114 C C程序中内嵌汇编指令程序中内嵌汇编指令 n在ARM的C语言程序中我们可以使用关键字_asm来加入一段汇编语言的程序,格式如下: _asm instruction/*comment*/ 115 C C程序中内嵌汇编指令程序中内嵌汇编指令n在C语言中嵌入的ARM汇编需要注意一些问题:在汇编指令中,可以使用表达式,使用逗号“,”作为分隔符 ;如果一条指令占用了多行,那么应该使用符号“”续行,如果一行中有多个汇编指令,那么应该使用“;”将多个指令隔开,汇编中不能再使用“;”作为注释行的开头,而应该使用C

55、语言中的“/*/”或者“/”进行注释;不要企图使用一个物理寄存器去改变一个C变量;对于内嵌的汇编代码用到的寄存器,编译器在编译时会自动加入保存和恢复这些寄存器的代码而不用用户去管理,除了寄存器CPSR和SPSR,其他寄存器都必须先赋值然后再读取,否则编译时将出现错误。116 C C程序中内嵌汇编指令程序中内嵌汇编指令n内嵌的ARM汇编与纯粹的ARM汇编的区别有:内嵌的ARM汇编不支持ADR、ADRL伪指令;十六进制数使用0 x作为前缀,而后者使用&;编译器在编译函数时使用R0、R1、R2、R3、IP和LR存放中间结果,因此使用这些寄存器时要特别小心;注意C语言中的C语言变量不要和物理寄

56、存器同名,否则可能出现混乱;内嵌的汇编代码不能使用PC寄存器返回当前指令的地址;STM和LDM指令中不能使用C语言表达式;不支持BX和BLX;用户可以改变处理器的模式,但仍然需要自己把处理器模式恢复过来,编译器不会自动做处理;嵌汇编指令常量前面的符号“#”可以省略;嵌汇编指令不支持内存分配的伪操作。117 C程序调用汇编程序程序调用汇编程序 n为了满足ARM汇编、C与C+之间的互相调用,必须保证编写的代码遵循APCS(ARM过程调用标准)。APCS规定了子程序调用的基本规则,这些规则包括子程序调用过程中寄存器、数据栈的使用规则以及参数的传递规则。n示例见课本P*。 118 Linux下的下的A

57、RM汇编汇编nLinux下的ARM汇编指令与Window下的汇编相比,在ARM处理器的指令使用方面是大同小异的,不同的是编译工具和ARM汇编的伪操作,其语法更类似于gas 风格的汇编.nGNU提供的基于ARM平台的编译工具如下:汇编器arm-elf-as,作用是将汇编语言程序转化为ELF格式的可重定位目标代码。C编译器arm-elf-gcc,是ARM的交叉编译器,运行于Linux平台,它在编译时,首先通过预处理程序对源代码进行处理,然后调用ccl将处理后的程序转化为汇编代码,最后通过arm-elf-as将汇编代码编译为目标代码。连接器arm-elf-ld,可以根据链接定位文件的代码区 数据区

58、BSS区和栈区等定位信息,将多个可重定位的目标模块链接成一个单一的,绝对定位的,ELF格式的目标程序。二进制转换工具arm-elf-objcopy,是目标格式转化工具,它能够将ELF格式的文件转化为其他格式的文件。119 Linux汇编程序中的标号汇编程序中的标号 n标号只能由az,AZ,09,“.”, _等字符组成.当标号为09的数字时为局部标号,局部标号可以重复出现,使用方法如下:标号f:在引用的地方向前的标号;标号b:在引用的地方向后的标号n使用局部符号的例子(“”符号后的语句为注释):1: subs r0,r0,#1 每次循环使r0=r0-1 bne 1f 跳转到1标号去执行n局部标号

59、代表它所在的地址,因此也可以当作变量或者函数来使用。120 Linux汇编程序中的分段名汇编程序中的分段名 n段名:汇编系统预定义的段名有: .text、.data、.bss、.sdata、.sbss等,每一个段以段名为开始,以下一个段名或者文件结尾为结束.n用户可以通过.section伪操作来自定义一个段,格式如下: .section section_name , flags, %type,flag_specific_argumentsn示例: .section .mysection 自定义数据段,段名为 “.mysection” .align2 .strtemp: .asciiTemp s

60、tring n0121 Linux汇编程序中的宏定义汇编程序中的宏定义n格式如下: .macro 宏名 参数名列表 伪指令.macro定义一个宏 宏体 .endm .endm表示宏结束n如果宏使用参数,那么在宏体中使用该参数时添加前缀“”。宏定义时的参数还可以使用默认值。n可以使用伪指令来退出宏。122Linux下下ARM汇编的常用伪操作汇编的常用伪操作 n数据定义伪操作: .byte,.short,.long,.quad, .float,.string/.asciz/.ascii,重复定义伪操作.rept,赋值语句.equ/.set ;n函数的定义 ;n对齐方式伪操作 .align;n源文件结束伪操

温馨提示

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

评论

0/150

提交评论