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

相关推荐
珞光电子USRP SDR软件无线电平台21 小时前
国产嵌入式SDR平台LW-E320-G详解:射频、FPGA、ARM架构与应用选型
arm开发·fpga开发·架构
Jason_zhao_MR1 天前
Linux与采集MCU通信为什么我们用了双SPI
linux·arm开发·单片机·嵌入式硬件·嵌入式
ARM|X86+FPGA工业主板厂家2 天前
基于嵌入式 GPU 的智能服务机器人
linux·运维·arm开发·fpga开发·机器人
一池秋_3 天前
arm低配linux设备,桌面应用冷启动提速方法
linux·运维·arm开发
qq_402995753 天前
诊断协议栈配置Agent
arm开发·人工智能·stm32·单片机·mcu
一木 之林5 天前
三.C++ 内存管理(进阶)(二)
开发语言·arm开发·c++
hongmai6668886 天前
MP2348GTL-Z:这颗24V/4A同步降压芯片,把性能和体积平衡得恰到好处
c语言·开发语言·arm开发·单片机·5g
隔窗听雨眠7 天前
ARM架构下Logstash与Elasticsearch集群部署完全指南:从环境适配到生产验证
arm开发·elasticsearch·架构
郭老师-嵌入式7 天前
arm linux 移植 udhcp 与 使用
linux·服务器·arm开发
深念Y8 天前
登录日志与管理员审计日志存储决策
前端·arm开发·后端·微服务·云原生·架构