嵌入式系统的定义
An Embedded system is the devices used to control,monitor, or assist the operation of equipment,machinery or plants. 以应用为中心,以计算机技术为基础,软件硬件可裁剪,适应应用系统对功能、可靠性、成本、功耗严格要求的,专用计算机系统。 嵌入式实时操作系统的特点:
(1)采用抢占式的调度策略,任务实时性好,且执行时间是确定的; (2)具有可裁剪性(根据任务的需要与否进行添加或删除操作系统模块)和可移植性(移植到各种处理器上);
(3)具有较好的可靠性和可扩展性,适合嵌入式产品的应用开发。 嵌入式系统在工程领域的应用
ARM内核版本命名规则
ARM {x}{y}{z}{T}{D}{M}{I}{E}{J}{F}{-S}
x —系列号,例如ARM7中的“7” y —内部存储管理/保护单元 z —内含有高速缓存Cache; T —支持16位的Thumb指令集; D —支持JTAG片上调试; M —支持用于长乘法操作的ARM指令 I ——带有嵌入式追踪宏单元; E —增强型DSP指令(基于TDMI) J —含有Java加速器Jazelle F—向量浮点单元
ARM内核模块
ICE,在线仿真器,In Circuit Emulator
ETM,嵌入式追踪宏单元,Embedded Trace Macro
TAP,测试访问端口,Test Access Port
JTAG是联合测试工作组(Joint Test Action Group)
三级流水线:取指、译码、执行(进行逻辑电路的实现)
五级流水线:取指、译码、执行(计算要访问的存储器地址)、存储器访问(实现数据缓冲功能)、寄存器回写
程序状态寄存器
T:控制位,0表示ARM指令,1表示Thumb指令 F:FIQ中断使能 I:IRQ中断使能 J:Jazelle状态标志位 V:溢出标志位 C:进位或借位标识 Z:结果为0标识 N:符号位标识 ARM处理器的异常
数据终止、快速中断请求、普通中断请求、预取指中止、软件中断、复位、未定义指令。
ARM所有异常中,除了复位异常外,其余的异常都需要返回。 PC指向正被取指的指令,而非正在执行的指令 寄存器移位
ASR算术右移:空出的最高有效位用“符号位”填充; ROR循环右移:移出的低位依次填入空出的高位 RRX带扩展的循环右移:
数据处理指令寻址方式(第二操作数):
立即数方式、寄存器方式、寄存器移位且移位数为5位立即数、寄存器移位且移位数值放在寄存器中、寄存器进行RRX移位得到 ARM指令集系统:数据处理指令、分支指令、加载/存储指令、批量加载/存储指令、交换指令、程序状态寄存器处理指令、协处理器操
作指令、异常产生指令。
程序流跳转:使用专门的分支指令(跳转范围-32M—+32M)
直接向PC写入跳转地址值(在4G的地址空间中任意跳转) 交换指令:能在一条指令中实现存储器和寄存器之间交换数据。 程序状态寄存器PSR访问指令:MSR(读)和MRS(写),通过“读取-修改-写回”的操作序列实现。但必须通过BX等指令完成程序状态等的切换。 ARM处理器最多可支持16个协处理器,每个协处理器只执行针对自身的协处理指令。协处理器执行加载/存储指令失败,将产生未定义的指令异常。
ARM异常产生指令:软中断指令SWI,断点调试指令BKPT 伪指令
ARM处理器支持的汇编语言程序里的特殊助记符,它不在处理器运行期间由机器执行,而是在汇编时被合适的机器指令替代成ARM或Thumb指令,从而实现真正的指令操作。 伪操作
ARM汇编语言程序里的特殊的指令助记符,其作用是为完成汇编程序做各种准备工作。只在汇编过程中起作用。
LDR:将32位的常数或地址值读取到寄存器中。若常数符合立即数的要求,则用MOV或MVN替代,否则放入内存文字池。
ADRL、ADR:将基于PC相对偏移的地址或基于寄存器相对偏移的地址值读取到寄存器。可被两条具有等功能的ADD或SUB指令替代。
.equ /.set symbol expr:给数字常量或程序中的标号指定一个名称 .equiv:功能同上。symbol必须在程序段中第一次定义。 .fill repeat,{size},{value} 分配一段字节内存单元,用长度为size的value值填充repeat次
.zero size 用0初始化长度为size的内存单元
.org offset,{expr} 指定从当前地址加offset开始存放代码,并且用0或指定的数据填充当前地址到当前地址加上offset之间的空间. GNU标准中提供了:支持ARM汇编语言的汇编器as、交叉编译器gcc、 链接器ld.
LDRB R0,[R1] R0 <- [R1]字节单元,R0高24位清零 STRB R0,[R1] R0的低8位 -> [R1]
LDRH R2,[R1,#4] R2 <- [R1+4]半字单元,R2的高16位清零 STRH R0,[R1,#4]! R0低16位 -> [R1+4],同时R1=R1+4
LDRSB R0,[R1,#4] R0 <- [R1+4]字节单元,R0高24位用符号扩展 LDRSH R0,[R1],#4 R0 -> [R1]半字单元且R0高16位用符号扩展,R1=R1+4
如何用带PSR操作的批量字数据加载指令实现IRQ中断的返回 SUB R14,R14,#4 ;计算返回地址,并保存相关寄存器 STMFD R13!,{R0-R3,R12,LR}
LDMFD R13!,{R0-R3,R12,PC};将LR的内容装入PC,实现子程序返回