1.基本概念
嵌入式:以应用为心,以计算机技术为础,软便件可被的专用计算机系统。
计算机系统的软件基本组成: 系统软件、应用软件。
计算机系统的硬件基本组成:运算器、控制器、存诸器、输入设备、输出设备
日常生活中遇到的专业术语:
CPU中央处理器(Center Processing Unit):一种通用的强大处理器。
GPU图形处理器(Graphics Processing Unit):处理图像的处理器
FPU浮点型运算单元(Float Processing Unit)
在嵌入式行业里:
MPU(Mico Processing Unit):微处理器,偏向处理,强调通用
MCU(Mico Contral Unit):微控制器,偏向控制,强调集成度
单片机:单片微型计算机
DSP(Digital Signal Processing):数字信号处理器,高强度数学计算的专用芯片
SOC(System On Chip):片上系统,SOC是一个设计和集成的概念,把MPU,MCU,
GPU,DSP,modam(调制解调器)规划在一起形成功能完善的蓝图。
RAM(随机存储器)(Random Access Memory):价格贵,地址总线链接,每一个字节都可以被处理器直接寻址,运行速度较ROM快,掉电数据丢失
ROM(只读存储器)(Read-only Memory)(块设备):价格便宜,运行速度满,掉电数据不丢失。
本次我们学习ARM使用的开发板是正点原子的IMAX6ULL
CISC:复杂指令集架构(体积大,功耗大,适用于电脑)
SISC:精简指令集架构(体积小,功耗小,适合应用于小型移动设备)
ARM
核心架构版本:ARM1-ARM11,11之后ARM分为A(CortexA-app应用),R(CortexR-realtime实时),M(CortexM-mcu单片机)
指令集版本:v1-v9
ALU算数逻辑单元:位于内核,如int a = 1,int b = 2, int c = a + b ,RAM将数据发送到位于内核的通用寄存器,通过ALU计算得出结果。由于通用寄存器不能被指针地址访问,因此无法通过c语言进行操作,需要用汇编语言对通用寄存器进行操作。而外设寄存器下挂在地址总线,需要通过总线(指针)进行访问。
存储器分类:RAM(内存),ROM(外存),register(寄存器),Cache(高速缓存)其分为数据Cache和指令Cache,其与MMU类似,使用那部分就打开那部分,将不使用的部分关闭,避免地址映射错误,使用Cache可以避免例如for循环中对变量的重复读取和修改,提高了运行效率。
栈(顶)背靠内核,向下生长,避免向上生长数据越界到内核空间导致系统崩溃。
CPSR(current program status register):当前程序状态寄存器
SPSR(saved program status register):备份程序状态寄存器
寄存器组示意图:
sp(stack point):栈指针寄存器,用来记录栈顶位置。
lr(link regist):链接寄存器,保存程序跳转前的下一行程序地址,方便程序执行完后返回继续执行。
pc(program conter):程序计数器 ,指向要执行的下一行代码,每执行一行代码会自加一次,向后偏移,当执行函数调用时,pc跳转到要执行的函数地址,在函数执行完后返回lr寄存器保存的跳转前的下一行程序位置继续执行 。
那么问题来了,lr只有一个,当进行函数嵌套的时候,lr多次保存会导致地址覆盖,那函数是怎么精准的返回的呢?
答案是lr在被覆盖前会将先前的地址放入栈中,虽然lr只能存放一个地址,但是相对栈来说栈的空间无限大且连续,压栈和弹栈的顺序都是固定的,因此通过lr和栈配合下程序可以做到准确返回。
面向应用的ARM最小系统:
存储器的结构层次:
单总线结构和多总线结构
RAM和ROM的分类:
冯诺依曼架构(普林斯顿架构):其核心是共享存储,分时访问。代码和数据公用一个内存空间和总线,取数据和取指令串行交替执行。
哈佛架构:其核心是分离存储,并行访问。指令和数据存储在两个独立的物理内存模块中,并且使用两条独立的总线进行访问。我们所学的ARM就是采用的改进型哈佛架构,即在芯片内部采用哈佛架构,在芯片外部采用冯诺依曼架构。
ARM工作模式:
每种模式的栈是独立的,sp指向的空间不同。
cpsr(程序状态寄存器):
N:程序执行后最高位的数值(运算符号1负0正)
Z:记录操作结果是否为0。如果结果为0,则 Z = 1。如果结果不为0,则 Z = 0。
C:记录无符号数运算的进位或借位。对于加法(ADD, ADC):如果加法产生了进位(结果小于任意一个加数),则 C = 1,否则为0。对于减法(SUB, SBC, CMP):如果减法没有发生借位,则 C = 1;如果发生了借位,则 C = 0。这一点容易混淆,可以理解为:C = 1
表示无符号减法结果有效(被减数 >= 减数),C = 0
则表示下溢(被减数 < 减数)。
V:记录有符号数运算是否发生了溢出。如果操作导致溢出(结果超出了有符号数所能表示的范围),则 V = 1。否则,V = 0。
M位(0-4bit):负责记录处理器模式。
SPSR(保存的程序状态寄存器):它的唯一目的就是:当异常(或中断)发生时,自动地、硬件地保存当前模式下的 CPSR 状态。
异常向量表:CPU硬件设计中的一个关键机制,它决定了当发生异常或中断时,CPU应该去哪里找到处理这个事件的代码。存放着异常处理程序的入口地址。