嵌入式——ARM体系结构

嵌入式:以应用为中心,以计算机技术为基础,软硬件可剪裁的专用计算机系统。根据用户需求(功耗,体积,环境,稳定性,可靠性等等)

计算机系统:

1,软件系统:应用软件+系统软件

2,硬件系统

1)运算器

2)控制器(和运算器组成CPU)

3)存储器

4)输入设备

5)输出设备

注:五个基本组成中最基本的设备是运算器、控制器和存储器

SOC(片上系统):kearnal(内核),UART,GPIO,PWM,磁盘控制器...

以下为嵌入式核心架构示意图

kearnal架构:X86,ARM等等

CISC(complex instraction set computer):复杂指令集计算机(X86)

RISC(reduce instraction set computer):精简指令集计算机(ARM)

ARM

发展:ARM1---ARM11---Cotex-A(APP),Cotex-R(Real-time实时),Cotex-M(MCU)

指令集:ARM V1---V9

RAM读取数据

RAM是外部器件,那RAM如何从内核中读取、写入数据的操作呢?

内核连有数据总线、地址总线、控制总线,前两种总线数量和机器字长有关,所以有32根,最后一种若干,有时钟线等信号线。而内核就通过各种总线和RAM进行连接,一次可以读取4个字节(这也是为什么int型称为基本整型,因为其跟底层单次数据读取能力有关),数据总线传输普通数据,地址总线用来定位内存上特定的位置,然后RAM就可以读取该4个字节的数据

架构(内核以Cotex-A7为例)

Cotex-A7:32bit(4字长)

在其CPU中还含有ALU(算数逻辑单元,进行算术运算)、MMU等其他设备

寄存器

有的寄存器可以用指针直接访问(例如RAM),有的就不行(内部寄存器),因为内核通过地址总线进行访问时,有挂载在地址总线上的寄存器,才支持用指针确定要访问的位置,所以内部寄存器这些内核里的,需要用汇编语言进行操作,直接用其寄存器名称访问即可

ARM七个模式一共有37个32-bits寄存器,而Cortex体系结构下多了3个寄存器(r13_mon,r14_mon,spsr_mon)

内部寄存器

16个内核内部通用寄存器:R0,R1,......,R15,主要作用是缓存数据。一个寄存器内部也有32个bit位

R13(sp):stack pointer栈顶指针寄存器,用于记录栈顶生长的位置

R14(lr):linked register链接寄存器,用于保护现场,备份pc内部返回位置的值

R15(pc):program conter程序寄存器,用来指向当前程序即将预取的指令

外部寄存器

像是GPIO、UART这些之中不属于系统内核内部的寄存器,也会同RAM一样挂接在总线上

Cache(高速缓存)

位于内核内部,分为i Cache(instruction指令)和d Cache(data数据),以下图为例,把i和sum缓存在数据Cache中,而for这个指令缓存在指令Cache中,算法算完后,将数据回写会RAM中,否则反反复复从总线传过来,CPU访问和回写数据的时间会大幅增加

在裸机阶段,i要打开,d要关闭,这是因为在操作硬件时,要更改例如UART一类的寄存器,为了使其立刻发生,直达硬件,而非存入缓存,所以d要关闭

MMU

memory management unit,内存管理单元,位于内核内部,用于分配虚拟内存空间,实现虚拟地址到物理地址的映射

CPSR,SPSR

Current Program Status Register,保存当前程序状态寄存器

Saved Program Status Register,备份程序状态寄存器

错误:右下Mode位的User mode应该是10000

N:表示上一次ALU最近的一次算数逻辑运算是否是负数(符号位)

Z:ALU最近的一次运算是否为0

C:是否产生进位或者借位操作

V:ALU操作是否溢出

E位:默认小端存储

Mode位,占了5个bit位

内核处理模式

注:还有hyp调试模式

寄存器组

注:

深灰色块:表示该模式和 User 模式共享这些寄存器。

浅色块(浅蓝、浅紫等):表示该模式独有的私有寄存器。

底部的spsr:只有特权模式才有,User 模式没有spsr

异常处理

异常向量表,都是些跳转指令,可以跳转到异常处理程序中

偏移量:可以理解为位置的地址值0

ARM态:当前内核正在执行ARM指令集

三级流水线

pc寄存器将指令读到内核内部之后,经过预取,译码,执行三个阶段才可以执行,所以在进行译码时,预取会进一步执行下一行代码,以此类推,为了防止硬件空闲

相关推荐
秋深枫叶红5 小时前
嵌入式第四十七篇——ARM汇编
汇编·arm开发·学习
s_daqing5 小时前
ubuntu(arm,手机)安装mysql
arm开发·mysql·ubuntu
jh10_5 小时前
嵌入式硬件DAY5(ARM汇编)
汇编·arm开发·嵌入式硬件
s_daqing6 小时前
ubuntu(arm)安装MongoDB
arm开发·mongodb·ubuntu
具身智能之心17 小时前
上海交大发布U-Arm:突破成本壁垒,实现超低成本通用机械臂遥操作系统
arm开发·机械臂·具身智能
XINVRY-FPGA21 小时前
XC7VX690T-2FFG1761I Xilinx AMD FPGA Virtex-7
arm开发·嵌入式硬件·fpga开发·硬件工程·fpga
学好statistics和DS1 天前
内核(Kernel)与操作系统(OS)
arm开发
小时候逝去的夏夜1 天前
交叉编译入门:为什么要在 x86 上为 ARM 编译程序?
arm开发·硬件架构
_chirs1 天前
银河麒麟高级服务器操作系统V10(SP3-2403)-ARM版 gcc 更新
arm开发