嵌入式——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寄存器将指令读到内核内部之后,经过预取,译码,执行三个阶段才可以执行,所以在进行译码时,预取会进一步执行下一行代码,以此类推,为了防止硬件空闲

相关推荐
代码游侠3 天前
STM32开发——基础外设
linux·运维·arm开发·stm32·单片机·嵌入式硬件·学习
代码游侠4 天前
Linux驱动复习——驱动
linux·运维·arm开发·笔记·学习
古译汉书4 天前
【IoT死磕系列】Day 6:工业控制底层大动脉—CAN总线
linux·网络·arm开发·单片机·物联网·tcp/ip
姜太公钓鲸2334 天前
STM32是ST公司基于ARM Cortex-M内核开发的32位微控制器。上述文字中的内核是什么意思?作用是什么?
arm开发·stm32·嵌入式硬件
日更嵌入式的打工仔4 天前
FIQ 与 IRQ
arm开发·笔记
The️5 天前
STM32-FreeRTOS操作系统-软件定时器
arm开发·stm32·单片机·嵌入式硬件·mcu·c#
szxinmai主板定制专家5 天前
RK3588 8个USB工控解决方案,适用于机器视觉,工业互联等
arm开发·人工智能·fpga开发
我在人间贩卖青春5 天前
ARM编程模型
arm开发·arm工作模式
安全二次方security²5 天前
【CVE-2025-0647】ARM CPU漏洞安全通告
arm开发·安全·cve-2025-0647·tlbi·cpp rctx 指令·c1-ultra·虚拟化漏洞
道亦无名6 天前
armBitRevIndexTable1024
arm开发