嵌入式学习——ARM(1)

一、嵌入式系统

嵌入式:以应用为中心,以计算机技术为基础,软硬件可裁剪的专用计算机系统

设计时根据用户需求权衡:功耗、体积、环境、稳定性、可靠性

典型分层(自底向上):

层级 说明
硬件系统 处理器 + 存储器 + 外设
操作系统 SYS 内核、驱动
应用层 APP 具体业务程序

二、计算机系统组成

计算机系统 = 硬件系统 + 软件系统

  • 软件系统 = 应用软件 + 系统软件

计算机硬件系统五大组成:

  • 运算器
  • 控制器
  • 存储器
  • 输入设备
  • 输出设备

其中存储器又可细分为:ROM、RAM、Cache、Register(寄存器)

三、常见处理器分类

缩写 全称 中文 特点
CPU Central Processing Unit 中央处理单元 强大的通用型处理器
GPU Graphics Processing Unit 图形处理单元 擅长图形运算
FPU Float Processing Unit 浮点运算单元 负责浮点运算
NPU Neural Processing Unit 神经网络处理器 擅长 AI / 神经网络运算

嵌入式领域专用处理器:

  • MPU(Micro Processing Unit,微处理器):通用型,偏向处理
  • MCU(Micro Controller Unit,微控制器):集成度高,偏向控制(即"单片机"------单片微型计算机系统)
  • DSP(Digital Signal Processor,数字信号处理器):为高强度数学运算而设计的专用芯片
  • SoC(System on Chip,片上系统):一种集成和设计的理念------像一张蓝图,把"市政府(MPU)、警察局(MCU)、研究所(DSP)、机场(调制解调器)"放在同一片土地(芯片)上,形成一个功能完善的城市

SoC 内部通常集成: 内核(kernel1 / kernel2)、GPIO、PWM、UART、timer、硬盘控制器等。

四、RAM 与 ROM 对比

对比项 RAM(随机访问存储器) ROM(只读存储器)
直接寻址 ✅ 可被处理器直接寻址 ❌ 一般不可直接寻址
单位价格
掉电保持 易失性存储器 非易失性存储器
读写速率

五、指令集架构:CISC vs RISC

主流架构:X86、ARM、MIPS、RISC-V

  • CISC(Complex Instruction Set Computer,复杂指令集架构) :代表 X86(X64 是 X86 的 64 位扩展)
  • RISC(Reduced Instruction Set Computer,精简指令集架构) :代表 ARM

二八定律:2*4 <=> 2+2+2+2------80% 的时间只在执行 20% 的指令,因此精简指令集把常用指令做快,少见指令尽量少而精。

六、ARM 指令集与内核系列

  • 指令集版本:V1 ~ V4 ~ V9,常见有 V4、V5、V7、V9
  • 内核型号:ARM1 ~ ARM11

ARM Cortex 三大系列:

系列 定位 对应处理器
Cortex-A 应用级(App) MPU
Cortex-R 实时(Real-time) 实时控制
Cortex-M 微控制器(MCU) MCU

七、ARM 核心结构

  • 机器字长:ARM kernel 为 32 bit(4 字节)

通用寄存器(R0 ~ R15):

  • R0、R1、R2 ...(通用目的)
  • R13 = sp(stack pointer):栈顶指针寄存器
  • R14 = lr(link register):链接寄存器
  • R15 = pc(program counter):程序计数器

关键单元:

  • ALU(Arithmetic Logical Unit):算术逻辑单元
  • Cache(高速缓存)
    • iCache(指令缓存):打开
    • dCache(数据缓存):关闭
  • MMU(Memory Management Unit,内存管理单元) :负责物理内存空间 ↔ 虚拟内存空间 的地址转换;可关闭 MMU
  • CPSR(Current Program Status Register):当前程序状态寄存器
  • SPSR(Saved Program Status Register):备份程序状态寄存器

八、总线

  • 数据总线:32 根
  • 地址总线 :32 根,寻址范围 0x0000 0000 ~ 0xFFFF FFFF
  • 控制总线:若干根

九、虚拟内存布局(从高地址到低地址)

复制代码
0xFFFF FFFF
┌──────────────┐
│  操作系统内核  │
├──────────────┤
│    栈 区      │  ← 向下生长
├──────────────┤
│    堆 区      │  ← 向上生长
├──────────────┤
│  已初始化数据 │
├──────────────┤
│  未初始化数据 │
├──────────────┤
│    静态 区    │
├──────────────┤
│    代码 段    │
0x0000 0000    │
                │
   RAM(1G)    │   ROM(nor flash)
                └──────────────┘

十、函数调用与栈帧

示例代码:

c 复制代码
int fun0(int a, int b) {        // 0x2000
    if (a > b) return a;
    if (a <= b) return b;
}

int fun1(int a, int b) {        // 0x4000
    int sum = 0;
    sum = a + b;
    return sum;
}

int main() {                    // 0x1000
    int a = 100;
    int b = 200;
    bl 0x2000(a, b);
    sum = a + b;
}

调用过程中寄存器值:

  • R13 = sp
  • R14 = lr = 0x3000 + 4
  • R15 = pc = 0x3004

栈帧(从栈底到栈顶):

  1. 栈底:main 帧(a = 100,b = 200)
  2. 中间:fun0
  3. 栈顶:fun1

十一、GCC 编译四步走

bash 复制代码
gcc -E main.c -o main.i    # 预处理
gcc -S main.i -o main.s    # 编译(生成汇编)
gcc -c main.s -o main.o    # 汇编(生成目标文件)
gcc main.o -o main.out     # 链接(生成可执行文件)

十二、三级流水线

指令执行分三级:预取 → 译码 → 执行,多条指令重叠执行以提高吞吐:

复制代码
指令1:  [预取][译码][执行]
指令2:       [预取][译码][执行]
指令3:            [预取][译码][执行]

十三、AMBA 总线

  • AHB(Advanced High-performance Bus):先进的高速总线,连接高速外设
  • APB(Advanced Peripheral Bus) :先进的外设总线,连接低速外设TOC
相关推荐
myy-learn6 小时前
ARM-点亮第一颗LED
arm
zbyyd6 小时前
i.MX6ULL 裸机开发进阶|C 驱动、SDK、BSP 工程、链接脚本
arm
一直C8 小时前
ARM裸机开发|IMX6ULL GIC中断详解,中断流程、GIC版本分类、CP15协处理器
arm·imx6ull·寄存器
myy-learn9 小时前
ARM-复用寄存器以及电气寄存器深化-蜂鸣器
arm
祖力5510 小时前
ARM中断(IMX6ULL中断、GIC通用中断控制器)
嵌入式硬件·arm·imx6ull·中断·gic·通用中断控制器
susplus1 天前
【ARM 裸机开发 (IMX6ULL-mini)】GNU工具、Makefile 工程构建、链接脚本详解|C 语言点灯 + 蜂鸣器驱动
linux·arm·makefile·imx6ull
斑马1391 天前
ARM学习笔记(二)——ARM汇编基础
汇编·arm开发·arm
朝发如雪2 天前
快速掌握单片机基础(6)(数据处理与传送指令)(跳转与分支指令)(栈操作与混合编程)(程序状态寄存器操作指令)(内存映射)
单片机·arm
晊晌_h2 天前
ARM 学习 |ARM 汇编指令实战笔记
嵌入式·arm·arm汇编