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

相关推荐
陌上花开缓缓归以17 小时前
LiteOS和RTOS 系统选型分析
arm开发
深圳市九鼎创展科技19 小时前
瑞芯微 RK3399 开发板 X3399 评测:高性能 ARM 平台的多面手
linux·arm开发·人工智能·单片机·嵌入式硬件·边缘计算
森焱森1 天前
嵌入式硬件工程师应知 白银快速分析报告
linux·c语言·arm开发·嵌入式硬件·去中心化
森G1 天前
七、04ledc-sdk--------makefile有变化
linux·c语言·arm开发·c++·ubuntu
VekiSon2 天前
Linux内核驱动——杂项设备驱动与内核模块编译
linux·c语言·arm开发·嵌入式硬件
AI+程序员在路上2 天前
Nand Flash与EMMC区别及ARM开发板中的应用对比
arm开发
17(无规则自律)2 天前
深入浅出 Linux 内核模块,写一个内核版的 Hello World
linux·arm开发·嵌入式硬件
梁洪飞2 天前
内核的schedule和SMP多核处理器启动协议
linux·arm开发·嵌入式硬件·arm
代码游侠3 天前
学习笔记——Linux字符设备驱动
linux·运维·arm开发·嵌入式硬件·学习·架构
syseptember3 天前
Linux网络基础
linux·网络·arm开发