版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.:.;中国矿业大学徐海学院 信息10-1 邹柯 22100804第一章 嵌入式系统概述嵌入式系统综合描画是现代科学多学科相互交融的以运用技术产品为中心,以计算机技术为根底,以通讯技术为载体,以消费类产品为对象,引入各类传感器,进入Internet网络技术的衔接,从而顺应运用环境的产品。无多余软件,软件以固化态出现,硬件亦无多余存储器,可靠性高,本钱低,体积小,功耗少,包含于各种不同类型的设备。技术密集,投资强度大,高度分散,不断创新的知识密集型系统。反映当代最新技术的先进程度。嵌入式系统定义IEEE国际电气和电子工程师协会 给出的定义: 嵌入式系统是用于控制、监视或者辅助安装、机器或者设备运
2、转的安装。通常执行特定功能以微电脑和外围构成中心严厉的时序和稳定性要求此定义是从运用上思索的,嵌入式系统是软件和硬件的综合体,还可以涵盖机电等附属安装。从技术的角度定义:以运用为中心、以计算机技术为根底、 软件硬件可裁剪、顺应运用系统对功能、可靠性、本钱、体积、功耗严厉要求的公用计算机系统。(国内普遍被认同的定义)从系统的角度定义:嵌入式系统是设计完成复杂功能的硬件和软件,并使其严密耦合在一同的计算机系统。术语嵌入式反映了这些系统通常是更大系统中的一个完好的部分,称为嵌入的系统。嵌入的系统中可以共存多个嵌入式系统。广义与狭义的嵌入式系统“嵌入式系统是指操作系统和功能软件集成于计算机硬件系统;广
3、义上讲,凡是带有微处置器的公用软硬件系统都可称为嵌入式系统如各类单片机和DSP系统。这些系统在完成较为单一的专业功能时具有简约高效的特点但由于他们没有操作系统,管理系统硬件和软件的才干有限,在实现复杂多义务功能时,往往困难重重,甚至无法实现狭义上讲,我们更加强调那些运用嵌入式微处置器构成独立系统,具有操作系统,具有特定功能,用于特定场所的嵌入式系统国内普遍被认同的定义:嵌入式系统是以运用为中心,以计算机技术为根底,软、硬件可裁剪,顺应运用系统对功能、可靠性、本钱、体积、功耗等严厉要求的公用计算机系统。嵌入式系统三要素三要素:嵌入、公用、计算机嵌入式系统的特点:由三要素引出嵌入性:嵌入到对象体系
4、中,有对象环境要求公用性:软、硬件按对象要求裁减计算机:实现对象的智能化功能嵌入式系统的组成嵌入式系统普通由嵌入式微处置器、外围硬件设计备、嵌入式操作系统及用户运用程序4部分组成。嵌入式系统设计的中心部件是各种类型的嵌入式处置器。嵌入式系统的硬件组成硬件层是由嵌入式微处置器、存储器系统、通用设备接口和I/O接口A/D 、D/A、I/O等组成。在一片嵌入式微处置器根底上添加电源电路、时钟电路和存储器电路ROM 和SDRAM等,就构成了一个嵌入式中心控制模块。其中操作系统和运用程序都可以固化在ROM中。嵌入式系统之最小系统嵌入式微处置器中心、存储器ROM、RAM、Flash ROM、I/O设备、电
5、源模块、复位嵌入式系统之接口模块USB模块、LCD模块、键盘模块嵌入式系统的软件组成中间层-板级支持包BSP与硬件相关的底层驱动软件中间层也称为硬件笼统层HAL或板级支持包BSP,它把系统软件与底层硬件部分隔离,使得系统的底层设备驱动程序与硬件无关。BSP具有以下两个特点:1)操作系统相关性 2)硬件相关性 设计一个完好的BSP需求完成两部分任务:嵌入式系统的初始化:片级初始化、板级初始化和系统级初始化 设计硬件相关的设备驱动。系统软件层-嵌入式操作系统是嵌入式运用软件的根底和开发平台。嵌入式系统的出现,处理了嵌入式软件开发规范化的难题。通用性强、可靠性强软件层由嵌入式操作系统、文件系统、图形
6、用户接口GUI、网络系统及通用组件模块组成。嵌入式操作系统的作用普通只是为了运用程序提供必要运转环境义务调度,附加义务通讯、内存管理等功能。嵌入式系统和系统的硬件根底关系严密,普通都需求移植和配置才可以运用。嵌入式操作系统让嵌入式系统的开发利用通用的功能模块,这可以让开发更加高效。 运用软件层-运用程序在嵌入式系统中,运用程序的层级远远少于通用计算机。由于控制硬件是嵌入式系统根本的操作,因此嵌入式运用程序依然与系统的硬件根底关系亲密。尤其在没有操作系统的情况下,嵌入式的运用程序需求直接访问存放器或者设备的地址来操作硬件。 基于RTOS开发的运用程序组成,用来完成对被控对象的控制功能。功能层是面
7、向被控对象和用户的,为方便用户操作,往往需求提供一个友好的人机界面。嵌入式系统开展 1、以单芯片为中心的可编程控制器方式的系统。普通没有操作系统的支持,经过汇编言语直接控制。2、以嵌入式CPU为根底,以简单操作系统为中心的嵌入式系统。有简单操作系统的支持,但通用性较弱。3、以嵌入式操作系统为标志的嵌入式系统。兼容性佳。4、以Internet为标志的嵌入式系统。与Internet相结合。第2章 ARM微处置器硬件构造什么是ARMARM既可以以为是一个公司的名字,也可以为是对一类微处置器的通称,还可以以为是一种技术的名字。CISC和RISC技术CISC:复杂指令集计算机Complex Instru
8、ction Set Computer具有大量的指令和寻址方式8/2原那么:80%的程序只运用20%的指令大多数程序只运用少量的指令就可以运转。RISC:精简指令集计算机Reduced Instruction Set Computer在通道中只包含最有用的指令确保数据通道快速执行每一条指令使CPU硬件构造设计变得更为简单RISC体系构造特点:指令集中的大多数指令只需求执行简单和根本的功能;减少存储器访问指令;芯片逻辑采用硬布线逻辑;减少指令数和寻址方式指令译码简化。CISC与RISC的对比计算机体系构造分类冯诺依曼体系构造模型冯诺依曼体系构造的特点1数据与指令都存储在存储器中2被大多数计算机所采
9、用ARM7冯诺依曼体系构造哈佛体系构造哈佛体系构造的特点1程序存储器与数据存储器分开2提供了较大的存储器带宽3适宜于数字信号处置4大多数DSP都是哈佛构造ARM9哈佛体系构造ARM和Thumb指令ARM体系构造在V4版中添加了16位Thumb指令集。ARM指令集效率高,但是代码密度低;Thumb指令集具有较高的代码密度,却依然坚持ARM的大多数性能上的优势,它是ARM指令集的子集。ARM和Thumb形状切换一切的ARM指令都是可以有条件执行的,而Thumb指令仅有一条指令具备条件执行功能。ARM程序和Thumb程序可相互调用,相互之间的形状切换开销几乎为零。进入Thumb形状:当操作数存放器的
10、形状态位为1进入ARM形状:当操作数存放器的形状态位为0ARM操作面向32位操作数,以字为单位对齐Thumb操作面向16位操作数,以半字为单位对齐;流水线技术流水线(pipeline)是 Intel初次在486芯片中开场运用的。流水线(Pipeline)技术:几个指令可以并行执行 提高了CPU的运转效率 内部信息流要求通畅流动为添加处置器指令流的速度,ARM7 系列运用3级流水线.ARM存储系统ARM体系构造可以用两种方法存储字数据,称之为大端格式和小端格式。大端格式(big-endian):字数据的高字节存储在低地址中,而字数据的低字节那么存放在高地址中小端格式(little-endian)
11、:与大端存储格式相反。低地址中存放的是字数据的低字节,高地址存放的是字数据的高字节。ARM 可以用 little/big endian 格式存取数据. 存储器系统的层次构造第三章 ARM寻址方式与指令系统3.1 ARM编程模型3.1.1 处置器方式处置器7种方式除用户方式外,其它方式均为特权方式。ARM内部存放器和一些片内外设在硬件设计上只允许或者可选为只允许特权方式下访问。此外,特权方式可以自在的切换处置器方式,而用户方式不能直接切换到别的方式。快中断、中断、管理、中止、未定义这五种方式称为异常方式。它们除了可以经过程序切换进入外,也可以由特定的异常进入。当特定的异常出现时,处置器进入相应的
12、方式。每种异常方式都有一些独立的存放器,以防止异常退出时用户方式的形状不可靠。用户、系统这两种方式都不能由异常进入,而且它们运用完全一样的存放器组。系统方式是特权方式,不受用户方式的限制。操作系统在该方式下访问用户方式的存放器就比较方便,而且操作系统的一些特权义务可以运用这个方式访问一些受控的资源。3.1.2 ARM微处置器的任务形状第一种:为ARM形状,此时处置器执行32位的字对齐的ARM指令;第二种:为Thumb形状,此时处置器执行16位的、半字对齐的Thumb指令。 在程序的执行过程中,微处置器可以随时在两种任务形状之间切换,并且,处置器任务形状的转变并不影响处置器的任务方式和相应存放器
13、中的内容。进入Thumb形状当操作数存放器的形状位为1时,可以采用执行BX指令的方法,使微处置器从ARM形状切换到Thumb形状。此外,当处置器处于Thumb形状时发生异常如IRQ、FIQ、Undef等,那么异常处置前往时,自动切换到Thumb形状。 Thumb的特点Thumb是对32位存放器操作的16位指令集与32位ARM指令集相比代码尺寸更小,更适宜嵌入式运用。由于是对32位构造的CPU操作,所以比纯16位的指令集效率更高。与其它32位下的16位指令集相比,它还可以切换到32位ARM指令集并全速执行。进入ARM形状当操作数存放器的形状位为0时,执行BX指令时可以使微处置器从Thumb形状切
14、换到ARM形状。此外,在处置器进展异常处置时,把PC指针放入异常方式链接存放器中,并从异常向量地址开场执行程序,也可以使处置器切换到ARM形状。 3.1.3 内部存放器在ARM7TDMI处置器内部有37个用户可见的存放器。31个通用存放器6个形状存放器在不同的任务方式和处置器形状下,程序员可以访问的存放器也不尽一样。在汇编言语中存放器R0R13为保管数据或地址值的通用存放器。它们是完全通用的存放器,不会被体系构造作为特殊用途,并且可用于任何运用通用存放器的指令;其中R0R7为未分组的存放器,也就是说对于任何处置器方式,这些存放器都对应于一样的32位物理存放器;存放器R8R14为分组存放器。它们
15、所对应的物理存放器取决于当前的处置器方式,几乎一切允许运用通用存放器的指令都允许运用分组存放器;存放器R8R12有两个分组的物理存放器。一个用于除FIQ方式之外的一切存放器方式,另一个用于FIQ方式。这样在发生FIQ中断后,可以加速FIQ的处置速度。存放器R13、R14分别有6个分组的物理存放器。一个用于用户和系统方式,其他5个分别用于5种异常方式。 存放器R13常作为堆栈指针SP。在ARM指令集当中,没有以特殊方式运用R13的指令或其它功能,只是习惯上都这样运用。但是在Thumb指令集中存在运用R13的指令。 R14为链接存放器LR,在构造上有两个特殊功能:在每种方式下,方式本身的R14版本
16、用于保管子程序前往地址;当发生异常时,将R14对应的异常方式版本设置为异常前往地址有些异常有一个小的固定偏移量。R14LR存放器与子程序调用操作流程:1.程序A执行过程中调用程序B;2.程序跳转至标号Lable,执行程序B。同时硬件将“BL Lable指令的下一条指令所在地址存入R14LR;3.程序B执行最后,将R14存放器的内容放入PC,前往程序A;R14存放器与异常发生异常发生时,程序要跳转至异常效力程序,对前往地址的处置与子程序调用类似,都是由硬件完成的。区别在于有些异常有一个小常量的偏移。R14存放器留意要点当发生异常嵌套时,这些异常之间能够会发生冲突。例如:假设用户在用户方式下执行程
17、序时发生了IRQ中断,用户方式存放器不会被破坏。但是假设允许在IRQ方式下的中断处置程序重新使能IRQ中断,并且发生了嵌套的IRQ中断时,外部中断处置程序保管在R14_irq中的任何值都将被嵌套中断的前往地址所覆盖。1.执行用户方式下的程序;2.发生IRQ中断,硬件将某个地址存入IRQ方式下的R14_irq存放器,用户方式下的R14没有被破坏;3. IRQ效力程序A执行终了,将R14_irq存放器的内容减去某个常量后存入PC,前往之前被中断的程序; 4. 假设在IRQ处置程序中翻开IRQ中断,并且再次发生IRQ中断;5. 硬件将前往地址保管在R14_irq存放器中,原来保管的前往地址将被覆盖,
18、呵斥错误;6. 在程序B前往到程序A,然后在前往到用户方式下被中断的程序时,发生错误,将不能正确前往;存放器R15为程序计数器PC,它指向正在取指的地址。可以以为它是一个通用存放器,但是对于它的运用有许多与指令相关的限制或特殊情况。假设R15运用的方式超出了这些限制,那么结果将是不可预测的。 存放器CPSR为程序形状存放器,在异常方式中,另外一个存放器“程序形状保管存放器SPSR可以被访问。每种异常都有本人的SPSR,在进入异常时它保管CPSR的当前值,异常退出时可经过它恢复CPSR。ARM7TDMI内核包含1个CPSR和5个供异常处置程序运用的SPSR。CPSR反映了当前处置器的形状,其包含
19、:4个条件代码标志负(N)、零(Z)、进位(C)和溢出(V) ;2个中断制止位,分别控制一种类型的中断;5个对当前处置器方式进展编码的位;1个用于指示当前执行指令(ARM还是Thumb)的位。 假设异常处置程序曾经把前往地址拷贝到堆栈,那么可以运用一条多存放器传送指令来恢复用户存放器并实现前往。留意:中断前往指令的存放器列表其中必需包括PC后的“符号表示这是一条特殊方式的指令。这条指令在从存储器中装载PC的同时PC是最后恢复的,CPSR也得到恢复。这里运用的堆栈指针SPR13是属于异常方式的存放器,每个异常方式有本人的堆栈指针。这个堆栈指针应必需在系统启动时初始化。 整个地址空间的起始位置地址
20、从0 x00000000开场有以下指令。b SYS_RST_HANDLER;0 x00000000b UDF_IND_HANDLER;0 x00000004b SWI_SVC_HANDLER;0 x00000008b INS_ABT_HANDLER;0 x0000000cb DAT_ABT_HANDLER;0 x00000010b IRQ_SVC_HANDLER;0 x00000018b FIQ_SVC_HANDLER;0 x0000001c当发生外部中断恳求,处置器首先自动保管当前形状PCR14_,CPSRSPSR _ ,进入外部中断方式执行地址0 x00000018处的指令,即b IRQ_
21、SVC_HANDLER 转到IRQ_SVC_HANDLER处执行IRQ_SVC_HANDLER处的代码为:IRQ_SVC_HANDLERsub lr,lr,#4stmfd sp!,r0-r3,lrldr r0, =IRQ_SVC_Vectorldr pc,r0处置器将通用存放器和前往地址压入堆栈,接着跳转到外部中断恳求的中断效力程序中。 IRQ_SVC_Vector为外部中断恳求的中断向量。普通来讲, IRQ_SVC_Vector的地址对应于RAM地址空间;Bootload代码固化于flash中,对其只能读不能写。普通来讲, IRQ_SVC_Vector的地址对应于RAM地址空间;Bootlo
22、ad代码固化于flash中,只读不写。MAP _ISR_STARTADDRESSSYS_RST_VECTOR#4UDF_INS_VECTOR#4SWI_SVC_VECTOR#4INS_ABT_VECTOR#4DAT_ABT_VECTOR#4RESERVED_VECTOR#4IRQ_SVC_VECTOR#4FIQ_SVC_VECTOR#4ldr r0,IRQ_SVC_VECTOR中断效力程序入口地址ldr r1,=IsrIRQ中断效力程序入口地址str r1,r0外部中断恳求比较特殊:多种中断共用同一个入口。一切中断效力程序均可经过IRQ中断效力程序间接进入IsrIRQ进入异常在异常发生后,AR
23、M7TDMI内核会作以下任务:1.在适当的LR中保管下一条指令的地址,当异常入口:ARM形状,那么ARM7TDMI将当前指令地址加4或加8复制取决于异常的类型到LR中;为Thumb形状,那么ARM7TDMI将当前指令地址加2、4或加8 取决于异常的类型复制到LR中;异常处置器程序不用确定形状。2.将CPSR复制到适当的SPSR中;3. 将CPSR方式位强迫设置为与异常类型相对应的值;4.强迫PC从相关的异常向量处取指。ARM7TDMI内核在中断异常时置位中断制止标志,这样可以防止不受控制的异常嵌套。注:异常总是在ARM形状中进展处置。当处置器处于Thumb形状时发生了异常,在异常向量地址装入P
24、C时,会自动切换到ARM形状。异常向量退出异常当异常终了时,异常处置程序必需:1.将SPSR的值复制回CPSR;2.清零在入口置位的中断制止标志。3.将LR R14 中的值减去偏移量后存入PC,偏移量根据异常的类型而有所不同;注:恢复CPSR的动作会将T、F和I位自动恢复为异常发生前的值。快速中断恳求快速中断恳求(FIQ)适用于对一个突发事件的快速呼应,这得益于在ARM形状中,快中断方式有8个公用的存放器可用来满足存放器维护的需求这可以加速上下文切换的速度。不论异常入口是ARM形状还是Thumb形状,FIQ处置程序都会经过执行下面的指令从中断前往:SUBS PC,R14_fiq,#4在一个特权
25、方式中,可以经过置位CPSR中的F位来制止FIQ异常。中断恳求中断恳求IRQ异常是一个由nIRQ输入端的低电平所产生的正常中断在详细的芯片中,nIRQ由片内外设拉低,nIRQ是内核的一个信号,对用户不可见。IRQ的优先级低于FIQ。对于FIQ序列它是被屏蔽的。任何时候在一个特权方式下,都可经过置位CPSR中的I 位来制止IRQ。 不论异常入口是ARM形状还是Thumb形状,IRQ处置程序都会经过执行下面的指令从中断前往:SUBS PC,R14_irq,#4中止中止发生在对存储器的访问不能完成时,中止包含两种类型:预取中止 发生在指令预取过程中数据中止 发生在对数据访问时中止预取指中止当发生预取
26、中止时,ARM7TDMI内核将预取的指令标志为无效,但在指令到达流水线的执行阶段时才进入异常。假设指令在流水线中由于发生分支而没有被执行,中止将不会发生。 在处置中止的缘由之后,不论处于哪种处置器操作形状,处置程序都会执行下面的指令恢复PC和CPSR并重试被中止的指令: SUBS PC,R14_abt,#4中止数据中止在修复产生中止的缘由后,不论处于哪种处置器操作形状,处置程序都必需执行下面的前往指令,重试被中止的指令:SUBS PC,R14_abt,#8软件中断指令运用软件中断(SWI)指令可以进入管理方式,通常用于恳求一个特定的管理函数。SWI处置程序经过执行下面的指令前往:MOVS PC
27、,R14_svc这个动作恢复了PC并前往到SWI之后的指令。未定义的指令当ARM7TDMI处置器遇到一条本人和系统内任何协处置器都无法处置的指令时,ARM7TDMI内核执行未定义指令圈套。软件可运用这一机制经过模拟未定义的协处置器指令来扩展ARM指令集。注:ARM7TDMI处置器完全遵照ARM构造v4T,可以捕获一切分类未被定义的指令位格式。在模拟处置了失败的指令后,圈套程序执行下面的指令:MOVS PC,R14_svc这个动作恢复了PC并前往到未定义指令之后的指令。 复位当nRESET信号被拉低时普通外部复位引脚电平的变化和芯片的其它复位源会改动这个内核信号,ARM7TDMI处置器放弃正在执
28、行的指令。在复位后,除PC和CPSR之外的一切存放器的值都不确定。当nRESET信号再次变为高电平常,ARM处置器执行以下操作:1.强迫CPSR中的M4:0变为b10011管理方式;2.置位CPSR中的I和F位;3.清零CPSR中的T位;4.强迫PC从地址0 x00开场对下一条指令进展取指;5.前往到ARM形状并恢复执行 。 异常优先级当多个异常同时发生时,一个固定的优先级系统决议它们被处置的顺序:ARM的异常处置进入异常的处置保管PC值到LR保管CPSR到SPSR强迫改动Mode bits强迫PC值,从中断矢量表中预取下一条指令退出异常的处置恢复PC值从LR恢复CPSR从SPSR 去除中断屏
29、蔽位3.2.3 ARM处置器寻址方式 寻址方式分类寻址方式是根据指令中给出的地址码字段来实现寻觅真实操作数地址的方式。ARM处置器具有9种根本寻址方式。1.存放器寻址;2.立刻寻址;3.存放器移位寻址; 4.存放器间接寻址;5.基址寻址;6.多存放器寻址;7.堆栈寻址;8.块拷贝寻址;9.相对寻址。51寻址:位寻址 直接寻址存放器寻址立刻寻址指令中的操作码字段后面的地址码部分即是操作数本身,也就是说,数据就包含在指令当中,取出指令也就取出了可以立刻便用的操作数(这样的数称为立刻数)。立刻寻址指令举例如下: SUBSR0,R0,#1 ;R0减1,结果放入R0,并且影响标志位MOVR0,#0 xF
30、F000 ;将立刻数0 xFF000装入R0存放器 立刻寻址立刻寻址指令中的操作码字段后面的地址码部分即是操作数本身,也就是说,数据就包含在指令当中,取出指令也就取出了可以立刻便用的操作数(这样的数称为立刻数)。立刻寻址指令举例如下: SUBSR0,R0,#1 ;R0减1,结果放入R0,并且影响标志位MOVR0,#0 xFF000 ;将立刻数0 xFF000装入R0存放器 存放器移位寻址存放器移位寻址是ARM指令集特有的寻址方式。当第2个操作数是存放器移位方式时,第2个存放器操作数在与第1个操作数结合之前,选择进展移位操作。存放器移位寻址指令举例如下:MOVR0,R2,LSL #3 ;R2的值
31、左移3位,结果放入R0,即是R0=R28 ANDSR1,R1,R2,LSL R3 ;R2的值左移R3位,然后和R1相“与操作,结果放入R1存放器间接寻址存放器间接寻址指令中的地址码给出的是一个通用存放器的编号,所需的操作数保管在存放器指定地址的存储单元中,即存放器为操作数的地址指针。存放器间接寻址指令举例如下: LDRR1,R2 ;将R2指向的存储单元的数据读出,保管在R1中 SWPR1,R1,R2;将存放器R1的值和R2指定的存储单元的内容交换 基址寻址基址寻址就是将基址存放器的内容与指令中给出的偏移量4K相加/减,构成操作数的有效地址。基址寻址用于访问基址附近的存储单元,常用于查表、数组操
32、作、功能部件存放器访问等。存放器间接寻址是偏移量为0的基址加偏移寻址。基址寻址指令举例如下(前索引寻址): LDRR2,R3,#0 x0C ;读取R3+0 x0C地址上的存储单元的内容,放入R2 STR R1,R0,#-4! ;先R0=R0-4,然后把R0的值保管到R1指定的存储单元 基址寻址指令举例如下: LDRR0,R1 ,#4 ;R0=R1,R1R14;后索引基址寻址;ARM这种自动索引机制不耗费额外的时间LDR R0,R1,R2 ;R0=R1+R2多存放器寻址多存放器寻址一次可传送几个存放器值,允许一条指令传送16个存放器的任何子集或一切存放器。多存放器寻址指令举例如下: LDMIAR
33、1!,R2-R7,R12;将R1指向的单元中的数据读出到;R2R7、R12中(R1自动加4) STMIAR0!,R2-R7,R12 ;将存放器R2R7、R12的值保管到R0指向的存储单元中 ;(R0自动加4)堆栈寻址堆栈是一个按特定顺序进展存取的存储区,操作顺序为“后进先出 。堆栈寻址是隐含的,它运用一个专门的存放器(堆栈指针)指向一块存储区域(堆栈),指针所指向的存储单元即是堆栈的栈顶。存储器堆栈可分为两种:向上生长:向高地址方向生长,称为递增堆栈 向下生长:向低地址方向生长,称为递减堆栈堆栈指针指向最后压入的堆栈的有效数据项,称为满堆栈;堆栈指针指向下一个待压入数据的空位置,称为空堆栈。
34、所以可以组合出四种类型的堆栈方式:满递增:堆栈向上增长,堆栈指针指向内含有效数据项的最高地址。指令如LDMFA、STMFA等; 空递增:堆栈向上增长,堆栈指针指向堆栈上的第一个空位置。指令如LDMEA、STMEA等; 满递减:堆栈向下增长,堆栈指针指向内含有效数据项的最低地址。指令如LDMFD、STMFD等;空递减:堆栈向下增长,堆栈指针向堆栈下的第一个空位置。指令如LDMED、STMED等。 块拷贝寻址多存放器传送指令用于将一块数据从存储器的某一位置拷贝到另一位置。 如:STMIAR0!,R1-R7;将R1R7的数据保管到存储器中。 ;存储指针R0在保管第一个值之后添加, ;增长方向为向上增
35、长。STMIBR0!,R1-R7;将R1R7的数据保管到存储器中。 ;存储指针R0在保管第一个值之前添加, ;增长方向为向上增长。 寻址方式分类相对寻址相对寻址是基址寻址的一种变通。由程序计数器PC提供基准地址,指令中的地址码字段作为偏移量,两者相加后得到的地址即为操作数的有效地址。相对寻址指令举例如下:BLSUBR1 ;调用到SUBR1子程序BEQLOOP ;条件跳转到LOOP标号处.LOOPMOVR6,#1.SUBR1. 简单的ARM程序3.3.3 Load/Store指令ARM指令集存储器访问指令数据处置指令ARM分支指令杂项指令存储器访问指令ARM处置器是典型的RISC处置器,对存储器
36、的访问只能运用加载和存储指令实现。RAM存储空间及I/O映射空间一致编址,除对RAM操作以外,对外围IO、程序数据的访问均要经过加载/存储指令进展。加载Load:存储器中的数据传送到存放器;存储Store:存放器中的数据传送到存储器;存储器访问指令分为单存放器操作指令、多存放器操作指令、数据交换指令。LDR/STR指令用于对内存变量的访问、内存缓冲区数据的访问、查表、外围部件的控制操作等。假设运用LDR指令加载数据到PC存放器,那么实现程序跳转功能,这样也就实现了程序散转。 一切单存放器加载/存储指令可分为“字和无符号字节加载存储指令和“半字和有符号字节加载存储指令。ARM存储器访问指令单存放
37、器存储LDR和STR字和无符号字节加载/存储指令LDR指令用于从内存中读取单一字或字节数据存入存放器中,STR指令用于将存放器中的单一字或字节数据保管到内存。指令格式如下:LDRcondTRd, ;将指定地址上的字数据读入Rd STRcondTRd, ;将Rd中的字数据存入指定地址 LDRcondBTRd, ;将指定地址上的字节数据读入Rd STRcondBTRd, ;将Rd中的字节数据存入指定地址其中,T为可选后缀。假设指令有T,那么即使处置器是在特权方式下,存储系统也将访问看成是在用户方式下进展的。T在用户方式下无效,不能与前索引偏移一同运用T。 LDR和STR字和无符号字节加载/存储指令
38、编码LDR/STR指令寻址非常灵敏,它由两部分组成,其中一部分为一个基址存放器,可以为任一个通用存放器;另一部分为一个地址偏移量。地址偏移量有以下3种格式: 立刻数。立刻数可以是一个无符号的数值。这个数据可以加到基址存放器,也可以从基址存放器中减去这个数值。 如:LDR R1,R0,#0 x12 ;R1-R0+0 x12存放器。存放器中的数值可以加到基址存放器,也可以从基址存放器中减去这个数值。 如: LDR R1,R0,R2 ; R1-R0+R2 LDR R1,R0,-R2 ; R1-R0-R2存放器及移位常数。存放器移位后的值可以加到基址存放器,也可以从基址存放器中减去这个数值。 如:LD
39、R R1,R0,R2,LSL #2 ;R1-R0+R2*4 从寻址方式的地址计算方法分,加载/存储指令有以下4种格式: 零偏移。 如:LDR Rd,Rn 前索引偏移。如:LDR Rd,Rn,#0 x04!程序相对偏移。如:LDR Rd,labe1 后索引偏移。如:LDR Rd,Rn,#-0 x04留意:必需保证字数据操作的地址是32位对齐的。LDR和STR半字和有符号字节加载/存储指令这类LDR/STR指令可加载有符号半字或字节,可加载/存储无符号半字。偏移量格式、寻址方式与加载/存储字和无符号字节指令一样。 LDRcondSB Rd, ;将指定地址上的有符号字节读入Rd LDRcondSH
40、Rd, ;将指定地址上的有符号半字读入Rd LDRcondH Rd, ;将指定地址上的半字数据读入Rd STRcondH Rd, ;将Rd中的半字数据存入指定地址留意:1.有符号位半字/字节加载是指用符号位加载扩展到32位,无符号半字加载是指用零扩展到32位;2.半字读写的指定地址必需为偶数,否那么将产生不可靠的结果;LDR和STR半字和有符号字节加载/存储指令编码LDR和STR指令运用例如:1.加载/存储字和无符号字节指令LDRR2,R5 ;将R5指向地址的字数据存入R2STRR1,R0,#0 x04 ;将R1的数据存储到R0+0 x04地址LDRBR3,R2,#-1 ;将R2指向地址的字节
41、数据存入R3,R2R21STRBR0,R3,-R8 ASR 2 ;R0-R3-R8/4,存储R0的最低有效字节2.加载/存储半字和有符号字节指令LDRSB R1,R0,R3;将R0+R3地址上的字节数据存入R1,高24位用符号扩展LDRH R6,R2,#2;将R2指向地址的半字数据存入R6,高16位用0扩展 ;读出后,R2=R2+2STRH R1,R0,#2!;将R1的半字数据保管到R0+2地址,LDR和STR -双字:加载/存储两个相邻的存放器,64位双字。其句法有4种:Op condD Rd,Rn 零偏移Op condD Rd,Rn,offset ! 前索引偏移Op condD Rd,la
42、bel 程序相对偏移Op condD T Rd,Rn,offset 后索引偏移其中:Rd 加载/存贮存放器中的一个,另一个是Rd+1。Rd必需是偶数存放器,且不是R14。Rn 除非指令为零偏移,或不带写回的前索引,否那么,Rn不允许与Rd和Rd+1一样。label label必需是在当前指令的上下252字节范围内。例如:LDRD R6,R11 ;R6R11,R7R11+4STRD R4,R9,#24 ;R4R9+24,R5R9+28ARM存储器访问指令多存放器存取多存放器加载/存储指令可以实如今一组存放器和一块延续的内存单元之间传输数据。LDM为加载多个存放器;STM为存储多个存放器。允许一条
43、指令传送16个存放器的任何子集或一切存放器。它们主要用于现场维护、数据复制、常数传送等。多存放器加载/存储指令格式如下: LDMcond Rn!,reglist STMcond Rn!,reglistcond:指令执行的条件;方式:控制地址的增长方式,一共有8种方式;!:表示在操作终了后,将最后的地址写回Rn中;reglist :表示存放器列表,可以包含多个存放器,它们运用“,隔开,如R1,R2,R6-R9,存放器由小到大陈列;:可选后缀。允许在用户方式或系统方式下运用。它有以下两个功能:1假设op是LDM且存放器列表包含R15时,那么除了正常的多存放器传送外,还将SPSR也复制到CPSR中。
44、这用于异常处置前往,仅在异常方式下运用。2数据传入或传出的是用户方式下的存放器,而不是当前方式的存放器。LDM和STM多存放器加载/存储指令编码多存放器加载/存储指令的8种方式如下表所示,右边四种为堆栈操作、左边四种为数据传送操作。进展数据复制时,先设置好源数据指针和目的指针,然后运用块拷贝寻址指令LDMIA/STMIA、LDMIB/STMIB、LDMDA/STMDA、LDMDB/STMDB进展读取和存储 。进展堆栈操作操作时,要先设置堆栈指针SP,然后运用堆栈寻址指令STMFD/LDMFD 、STMED/LDMED、STMFA/LDMFA和STMEA/LDMEA实现堆栈操作。数据块传送指令操
45、作过程如以下图所示,其中R1为指令执行前的基址存放器,R1那么为指令执行后的基址存放器。堆栈操作和数据块传送指令类似,也有4种方式,它们之间的关系如下表所示:ARM指令集和Thumb指令集的共同点较多的存放器,可以用于多种用途。对存储器的访问只能经过Load/Store指令。ARM指令集和Thumb指令集的不同点没有乘加指令及64位乘法指令没有协处置器指令没有数据交换指令没有程序形状存放器指令ARM指令LOAD/STORE指令综合运用1、链表操作在链接表中搜索与某一数据相匹配的元素。链接表的每个元素包括两个字,第1个字中包含一个字节数据:第2个字中包含指向下一个衔接表元素的指针,当这个指针为0
46、时表示链表终了。代码执行前R0指向链表的头元素。R1中存放将要搜索的数据,代码执行后R0执向第1个匹配元素,或者当没有匹配元素时R0为0。2、简单的串比较实现比较两个串的大小。代码执行前,R0指向第一个串,R1指向第2个串。代码执行后R0保管比较结果,假设两个串一样,R0为0;假设第1个串大于第2个串,R00;假设第一个串小于第2个串,R00。3. 简单的块复制实现简单的数据块复制。程序一次将48个字数据从R12作为首地址的一段延续的内存单元复制到R13作为首地址的一段延续的内存单元。代码执行前R12为源数据区首地址,R13为目的数据区首地址,R14为源数据区末地址。4. 子程序进入和退出时数
47、据的保管和恢复在调用子程序时,通常利用存放器R0R3传送参数和前往结果,这几个参数由子程序的调用者来保管,其他的子程序将要用到的存放器在子程序入口处保管,在子程序前往前恢复这些存放器。第3章 汇编言语程序设计ATPCS存放器的运用规那么数据栈的运用规那么参数的传送规那么子程序前往规那么ATPCS规定了一些子程序间调用的根本规那么,这些规那么包括子程序调用过程中存放器的运用规那么,数据栈的运用规那么,参数的传送规那么。有了这些规那么之后,单独编译的C言语程序就可以和汇编程序相互调用。存放器的运用规那么子程序间经过存放器R0R3来传送参数。存放器R0R3可记作a0a3。被调用的子程序在前往前无需恢
48、复存放器R0R3的内容。在子程序中,运用存放器R4R11来保管部分变量。存放器R4R11可以记作v1v8。子程序进入时必需保管这些存放器的值,在前往前必需恢复这些存放器的值。在Thumb程序中,通常只能运用存放器R4R7来保管部分变量。存放器R12用作过程调用中间暂时存放器,记作IP。在子程序之间的衔接代码段中经常有这种运用规那么。存放器R13用作堆栈指针,记作SP。在子程序中存放器R13不能用作其他用途。存放器SP在进入子程序时的值和退出子程序时的值必需相等。存放器R14称为衔接存放器,记作LR。它用于保管子程序的前往地址。假设在子程序中保管了前往地址,存放器R14那么可以用作其他用途。存放
49、器R15是程序计数器,记作PC。它不能用作其它用途。ATPCS中的各存放器在ARM编译器中和汇编器中都是预定义的。汇编调用C举例/c程序g前往5个整数的和int gint a, int b, int c, int d, int ereturn a + b + c + d + e;汇编程序调用c程序g计算5个整数i, 2*i, 3*i, 4*i, 5*i的和AREA f, CODE, READONLYIMPORT g ;运用伪操作数IMPORT声明c程序gSTR lr, sp,#-4! ;保管前往地址ADD r1, r0, r0 ;假设进入程序f时,r0中的值为i,r1值设为2*iADD r2,
50、 r1, r0 ;r2的值设为3*iADD r3, r1, r2 ;r3的值设为5*iSTR r3, sp, #-4! ;第五个参数5*i经过数据栈传送ADD r3, r1, r1 ;r3值设为4*iBL g ;调用c程序gADD sp, sp, #4 ;调整数据栈指针,预备前往LDR pc, sp, #4 ;前往ENDC文件自动运用R0、R1、R2、R3来传送第一个、第二个、第三个和第四个参数。假设参数多于4个,剩余的参数将被压入堆栈。从汇编程序中访问C程序变量在C程序中声明的全局变量可以被汇编程序经过地址间接访问,详细访问方法如下: 运用IMPORT伪指令声明该全局变量。 运用LDR指令读
51、取该全局变量的内存地址,通常该全局变量的内存地址值存放在程序的数据缓冲区中。 根据该数据的类型,运用相应的LDR指令读取该全局变量的值,运用相应的STR指令修正该全局变量的值。汇编程序中访问C程序变量举例AREA global_exp, CODE, READONLYEXPORT asmsubIMPORT globv ;声明全局变量asmsubLDR r1, = globv ;将内存地址读入到R1中LDR r0, r1 ;将数据读入到R0中ADD r0, r0, #2 STR r0, r1 ;修正 后再将值赋予变量MOV pc, lrEND第四章 嵌入式系统的软件设计嵌入式系统的设备驱动嵌入式系
52、统的设备驱动层用来完成嵌入式系统硬件设备所需求的一些软件初始化和管理。设备驱动层直接对硬件进展管理和控制,并为上层软件提供所需的驱动支持。板级支持包设备驱动层也称为BSPBoard Support Package, 板级支持包,为操作系统提供一个虚拟的硬件平台,操作系统运转在这个虚拟的硬件平台上。BSP是针对某个特定的单板而设计的,系统都会提供相应的演示版本的BSP最小系统BSP。BSP对于用户指系统开发人员是开放的,用户可以根据不同的硬件需求对其进展改动或二次开发。BSP主要包括BootLoader引导加载程序和设备驱动程序两个方面的内容。对于不同的嵌入式操作系统,BSP的详细构造和组成是不
53、一样的。BSP的特点与功能硬件相关性由于嵌入式实时系统的硬件环境具有运用相关性,所以,作为高层软件与硬件之间的接口,BSP必需为操作系统提供操作和控制详细硬件的方法。操作系统相关性不同的操作系统具有各自的软件层次构造,因此,不同的操作系统具有特定的硬件接口方式一个嵌入式操作系统针对不同的CPU,会有不同的BSP即使同一种CPU,由于外设的一点差别BSP相应的部分也不一样 设计一个完好的BSP需求完成两部分任务:设计初始化过程,完成嵌入式系统的初始化;设计硬件相关的设备驱动,完成操作系统及运用程序对详细硬件的操作。片级初始化:主要完成CPU的初始化设置CPU的中心存放器和控制存放器CPU中心任务
54、方式CPU的部分总线方式等片级初始化把CPU从上电时的缺省形状逐渐设置成为系统所要求的任务形状这是一个纯硬件的初始化过程板级初始化:完成CPU以外的其他硬件设备的初始化同时还要设置某些软件的数据构造和参数,为随后的系统级初始化和运用程序的运转建立硬件和软件环境这是一个同时包含软硬件两部分在内的初始化过程系统级初始化:这是一个以软件初始化为主的过程,主要进展操作系统初始化BSP将控制权转交给操作系统,由操作系统进展余下的初始化操作:包括加载和初始化与硬件无关的设备驱动程序建立系统内存区加载并初始化其他系统软件模块如网络系统、文件系统等最后,操作系统创建运用程序环境并将控制转交给运用程序的入口Bo
55、otLoaderBootLoader引导加载程序是在操作系统内核运转之前运转的一小段程序。初始化硬件设备建立内存空间的映射图完成整个系统的加载启动义务BootLoader通常固化在硬件上某个固态存储设备上,加电后自启动。在基于ARM的嵌入式系统中,系统在上电或复位时通常都从地址0 x00000000处开场执行,而在这个地址处安排的通常就是系统的Bootloader。Bootloader是严重地依赖于硬件而实现的。每种不同体系构造的处置器都有不同的Bootloader。BootLoader的任务方式启动加载方式正常启动方式这种方式也称为自主Autonomous方式,即BootLoader从目的机
56、上的某个固态存储设备上将操作系统加载到RAM中运转,整个过程没有用户的介入。这种方式是BootLoader的正常任务方式。因此在嵌入式产品发布的时候,BootLoader显然必需任务在这种方式下。下载方式提供应开发人员或者技术支持人员运用在这种方式下,目的机上的BootLoader将经过串口衔接或网络衔接等通讯手段从主机上下载文件,比如下载运用程序、数据文件、内核映像等。从主机下载的文件通常首先被BootLoader保管到目的机的RAM中然后再被BootLoader写到目的机上的固态存储设备中,BootLoader的这种方式通常在系统更新时运用。任务于这种方式下的BootLoader通常都会向
57、它的终端用户提供一个简单的命令行接口,比如U-Boot、Blob、VIVI等。Bootloader功能:初始化硬件设备、建立内存空间的映射图有的CPU没有内存映射功能如S3C44B0 x ,将系统的软、硬件环境带到一个适宜的形状,以便为最终调用操作系统内核或用户运用程序预备好正确的环境。 通常的硬件初始化任务: 封锁处置器内部指令/数据cache等 封锁中断 封锁看门狗 配置PLL 配置内存 初始化各任务方式的堆栈 配置中断 拷贝RW段,初始化ZI段设备驱动程序设备驱动程序是必不可少的。设备驱动程序是一组库函数,用来对硬件进展初始化和管理,并向上层软件提供访问接口。不同功能的硬件设备,它们的设
58、备驱动程序是不同的。硬件启动初始化硬件封锁关机硬件停用暂停硬件启用重新启用读操作读取数据写操作写入数据操作系统的作用操作系统的作用笼统操作系统笼统作用是指提供硬件的高层界面(虚拟机),取消硬件限制1) 操作系统提供无限的内存、无限的CPU、无限的设备2) 扩展机器,功能更强大,运用更方便【虚拟机】:运用户和程序员在不用涉及和了解硬件任务细节的情况下能方便的运用计算机,而为用户所提供的一个等价的扩展计算机,称为虚拟计算机操作系统的作用资源管理操作系统可以管理计算机系统中硬件与软件资源,使其得到充分而有效的利用1) 跟踪资源形状:时辰掌握计算机系统中资源的运用情况。2) 分配资源:处置对资源的运用
59、恳求,协调冲突,确定资源分配算法。3) 回收资源:回收用户释放的资源,以便下次重新分配。4) 维护资源:担任对系统资源的维护,防止受破坏。计算机资源主要包括处置机、存储器、I/O设备、信息(程序与数据)可将操作系统分为相应的四类管理机制处置器管理用于分配和控制处置机进程控制、进程同步、进程通讯、进程调度存储器管理内存的分配与回收内存分配、内存维护、地址映射、内存扩展I/O设备管理 I/O设备的分配与支配缓冲管理、设备分配、设备处置、设备独立性、虚拟设备文件管理文件的存取、共享和维护文件存储空间的管理、目录管理、文件的读写管理和存取控制操作系统的作用效力用户效力用户的观念OS用户与裸机间接口:操
60、作系统为方便用户运用计算机提供了二级访问接口: 1命令接口:命令行。 2调用接口:方式上类似于过程调用,在运用编程中运用。 3图形接口:图形用户界面GUI,方便用户运用。 编程更为容易,软件可移植性加强;运用更为方便。嵌入式操作系统的定义运转在嵌入式硬件平台上,对整个系统及其部件、安装等资源进展一致协调、指挥和控制的系统软件就叫做嵌入式操作系统。嵌入式操作系统的特点微型化 嵌入式操作系统模块越小越好。实时性 嵌入式操作系统内核普遍采用可剥夺方式。高可靠 嵌入式操作系统对高可靠性是一个根本要求。易移植可固化 可配置、可剪裁 独立的板级支持包,可修正 不同的CPU有不同的版本 运用的开发需求有集成
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年市场部部长管理工作计划书
- Unit 3第2课时(说课稿)Cartoon time四年级英语上册同步高效课堂系列(译林版三起)
- 2025年第一学期班主任工作计划范文样文
- 2025年超市年终工作总结及工作计划
- Unit 4 My school things Period 3(说课稿)-2024-2025学年Join in 外研剑桥英语(2024)三年级上册
- 2025年月某校周工作计划模板
- 2025年度保险销售工作计划范文
- 2025年区打私办反走私宣传工作计划
- 2025年酒店工作总结与计划范文
- 2025年大学新生学习计划
- 2023年保安公司副总经理年终总结 保安公司分公司经理年终总结(5篇)
- 2023中专《解剖学基础》题库202311593753185
- 化妆品生产许可申请表样板
- 教科版三年级上册科学教案(全册)
- 劳动力安排计划及劳动力计划表(样板)
- 利润表4(通用模板)
- 教育评价学全套ppt课件完整版教学教程
- 注塑领班作业指导书
- ASTM B330-20 Standard Test Methods for Estimating Average Particle Size of Metal Powders and Related Compounds Using%2
- 顾客忠诚度论文
- 血气分析及临床应用
评论
0/150
提交评论