嵌入式系统复习–概述
ARM体系结构的技术特征
ARM体系结构的基本版本
ARM处理器体系结构发展了v1 ~ v8共8个版本
具有两种执行状态支持三个主要指令集:
A32(ARM)
:32为固定长度指令集,通过不同架构变体增强部分32为架构执行环境(AArch32)
T32(Thumb)
:以16为固定长度指令集的形式引入的,随后在引入Thumb-2技术时增强为16位和32位混合长度指令集,部分32位架构执行环境现在称为AArch32
A64
:提供ARM和Thumb指令集类似功能的32位固定长度指令集,随ARMv8一起引入,是一种AArch64指令集。
ARM体系结构的命名规则
命名由下面几部分组成
ARM的RISC体系结构的发展中已经提供了低功耗、小体积、高性能的方案。而为了解决代码长度问题,ARM体系结构有增加了T变种,开发了一种新的指令体系,这就是Thumb指令集,它是ARM技术的一大特色。
技术概述
它有从标准32位ARM指令集抽出来的36条指令格式,从新变成16位的操作码,提高代码密度。
支持Thumb的核仅仅是ARM体系结构的一种扩展,所以编译器既可以编译Thumb代码,又可以编译ARM代码,处理器状态可以方便的切换、运行到Thumb状态,在该状态下指令集是16位的Thumb指令集。
特点
优点:在性能代码大小之间取得平衡,在需要低的存储代码时采用Thumb指令系统,但又比纯粹16的系统更高的性能,因为实际执行的是32位指令,所以用Thumb指令编写最小代码量的程序,却取得以ARM代码执行的最好性能
缺点:
Thumb2技术
Thumb2内核技术,在与现有ARM技术方案完全兼容,他是一种混合型指令集,兼有16位及32位指令,增加32位指令解决了之前Thumb指令集不能访问协处理器、特权指令和特殊功能指令(例如SIMD)的权限。Thumb2现在可以实现所以的功能,就不需要在ARM/Thumb状态之间反复切换了,代码密度和性能得到显著提高。
两种状态:
处理器在另种状态下切换时:
工作状态的切换方法:
1
时,执行BX Rm
进入Thumb状态0
时,执行BX Rm
进入ARM状态CPSR(当前程序状态寄存器)的低5位用于定义当前操作模式
CPSR[4:0] | 模式 | 用途 | 可访问的寄存器 |
---|---|---|---|
10000 | 用户 | 正常用户模式,程序正常执行 | PC,R14~R0,CPSR |
10001 | FIQ |
处理快速中断,支持高速数据传送或通道处理 | PC, R14_fiq ~ R8_fiq , R7~R0 , CPSR, SPSR_fiq |
10010 | IRQ |
处理普通中断 | PC, R14_irq ~ R13_irq , R12 ~ R0 , CPSR, SPSR_irq |
10011 | SVC |
操作系统保护模式,处理软件中断(SEI) | PC, R14_svc ~ R13_svc , R12 ~ R0 , CPSR, SPSR_svc |
10111 | 中止(ABT) |
处理存储器故障、实现虚拟存储器和存储器保护 | PC, R14_abt ~ R13_abt , 12 ~ R0 , CPSR, SPSR_abt |
11011 | 未定义 |
处理为定义的指令陷阱,支持硬件协处理器的软件仿真 | PC, R14_und ~ R13_und , R12 ~ R0 , CPSR, SPSR_und |
11111 | 系统 | 运行特权操作系统任务 | PC, R14 ~ R0, CPSR |
注:标红的为异常模式
ARM寄存器组成概述
ARM处理器共有37个寄存器,可以分为两类寄存器:
其中通用寄存器分为:
ARM程序状态寄存器
异常响应过程如下:
每个异常模式下都有
而FIQ模式还有额外的专用寄存器R8_fiq ~ R12_fiq, 使用这些寄存器可以加快快速中断的处理速度。
从异常中断处理程序中返回过程:
异常中断的优先级:1.复位 2.数据异常中断 3.FIQ 4.IRQ 5.预取指异常中止 6.SWI,未定义指令
ARM的流水线方式
ARM处理器支持的6中数据类型
大端存储,是将数据的低位字节放到高地址处,高位字节放到低地址处。
小端存储,是将数据的低位字节放到低地址处,高位字节放到高地址处。
存储器层次
MMU完成的工作
用于存储管理的系统控制协处理寄存器CP15
在基于ARM的嵌入式系统中,存储系统通常使用CP15来完成存储器的大部分管理工作。包含16个32位寄存器编号0 ~ 15
快速上下文切换技术
通过修改系统中不同进程的虚拟地址,避免在进行进程间切换时造成的虚拟地址到物理地址的重映射,从而提高系统性能。
ARM片上总线AMBA
异常表示
R14_ = return link
SPSR_ = CPSR
CPSR[4:0] = exception mode number
CPSR[5] = 0 //在ARM状态运行
If == Reset or FIQ then
CPSR[6] = 1
CPSR[7] = 1
PC = exceptoin vector address
复位操作:
一旦有复位输入,ARM处理器就立即停止执行指令,完成一列操作
R14_svc = UNPREDICTALE value
SPSR_svc = UNPREDICTALE value
CPSR[4:0] = 0b10011 // 进入管理模式
CPSR[5] = 0 // 在ARM状态运行
CPSR[6] = 1 //禁止快速中断
CPSR[7] = 1 //禁止正常中断
PC = 0x00000000
中断请求异常(IRQ)
通过处理器上的IRQ输入引脚,有外部引入IRQ中断异常,比FIQ有优先级低,当进入FIQ处理会屏蔽IRQ异常
R14_irq = address of next instruction to be
executed +4
SPSR_irq = CPSR
CPSR[4:0] = 0b10010 // 进入IRQ模式
CPSR[5] = 0 //在ARM状态运行
CPSR[7] = 1//禁止正常中断
PC = 0x00000018
未完待续