嵌入式:以应用为中心,以计算机技术为基础,软硬件可剪裁的专用计算机系统。根据用户需求(功耗,体积,环境,稳定性,可靠性等等)
计算机系统:
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寄存器将指令读到内核内部之后,经过预取,译码,执行三个阶段才可以执行,所以在进行译码时,预取会进一步执行下一行代码,以此类推,为了防止硬件空闲
