嵌入式 - ARM1

一.嵌入式系统基础概述

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

计算机系统的软件基本组成:系统软件(如操作系统)和应用软件

计算机系统的硬件基本组成运算器、控制器、存储器、输入设备、输出设备

CPU (Center Processing Unit):中央处理器是一种通用的强大的处理器

GPU (Graphics Processing Unit):图形处理器

FPU(Float Processing Unit):浮点型运算单元

MPU(Micro Process Unit):微处理器偏向处理复杂任务,高端嵌入式设备的核心计算

MCU(Micro Contral Unit):微控制器偏向控制和高集成度

DSP(Digital signal Process):数字信号处理器专为高度复杂数学运算设计

SOC(System On Chip):片上系统是一个集成化的概念,将 MPU、MCU、GPU、DSP 等多种

功能模块集成在一块芯片上

二.处理器架构与指令集

1.CISC 与 RISC

1. CISC(Complex Instuction Set Computer)

复杂指令集计算机,指令集庞大且复杂,试图用一条指令完成多种操作,不同指令周期差异大,一些复杂指令需要多个时钟周期,可以减少程序指令条数,硬件结构复杂

2. RISC(Reduced Instuction Set Computer)

精简指令集计算机,选取使用频率高的简单指令,绝大多数指令在单时钟周期内完成,指令格式规整,可以提高指令的并行度和执行效率,硬件实现相对简单

2. 冯诺依曼架构

指令和数据共享同一个存储空间和同一套总线,硬件结构简单,成本低,灵活性高,但CPU无法同时取指令和去操作数,效率低下,如通用计算机

3. 哈佛架构

指令和数据拥有独立的存储空间和独立的总线,即拥有两套总线,结构复杂,成本高,不够灵活,可以同时读取指令和数据,如DSP\MCU

4. ARM 内核版本与系列

核心架构版本:ARM1 - ARM11、ARM - A、ARM - R、ARM - M

指令集版本:V1 - V9

ARM内核属于改进的哈佛架构,拥有哈佛架构的高性能CPU缓存和总线,以及冯诺依曼架构的灵活性接口

三、计算机体系结构

1. ARM内核

1. ALU(Arithmetic Logic Unit)

算术逻辑单元,负责执行所有数学运算(加减乘除)和逻辑运算(与或非)

2. 寄存器组

​​r0 - r12​​:通用寄存器,用于暂存数据和地址。

​​r13 (sp - Stack Pointer)​​:​​栈指针​​,指向当前栈顶地址。

​​r14 (lr - Link Register)​​:​​链接寄存器​​,用于存储子程序的返回地址。

​​r15 (pc - Program Counter)​​:​​程序计数器​​,存放下一条要执行的指令的地址。

3. MMU(内存管理单元)

负责虚拟地址到物理地址的转换​、内存访问权限的管理。这是实现现代操作系统(如Linux)内存隔离和保护的基础。

4. Cache(高速缓存)

一种小型但极快的内存,用于缓存CPU最近可能访问的指令和数据,以弥补CPU和慢速主内存之间的速度差距。

5. CPSR / SPSR (程序状态寄存器)

CPSR:存储当前程序的状态信息,如运算结果是否为负(N)、零(Z)、进位(C)、溢出(V)等

即NZCV标志位,以及中断禁用、运行模式等。

SPSR:当发生异常或中断时,用于备份CPSR的状态,以便异常处理结束后能恢复现场。

2. 总线系统

1. 地址总线

CPU通过它指定要访问的内存或外设的地址。宽度(32位)决定了CPU的寻址能力

2. 数据总线

在CPU和内存/外设之间传输实际数据

3. 控制总线

传输各种控制信号(读/写、中断、时钟等)

4. 总线类型

AHB(Advansed High-performance Bus):连接高速设备,如内存控制器、DMA

APB(Advanced Peripheral Bus):一种典型的多总线分层结构,用于优化系统性能。

连接低速外设,如GPIO、UART、Timer。

3. 外设寄存器

  1. GPIO Register

  2. timer

  3. Uart

  4. RAM(Random Access Memory)

4. 内存映射

0x00000000 - 0xFFFFFFFF​​ 是一个32位系统的完整4GB线性地址空间。

地址空间从低到高通常被划分为不同区域:

​代码段 (.text)​​:存放程序指令。

​已初始化数据段 (.data)​​:存放已初始化的全局变量和静态变量。

​未初始化数据段 (.bss)​​:存放未初始化的全局变量和静态变量。

​堆区 (heap)​ ​:动态分配内存的区域(malloc)。

​栈区 (stack)​ ​:用于存储函数调用时的局部变量、返回地址等​。顶部区域常保留给内核使用。

四、ARM工作模式

​用户模式 (User)​​:正常程序执行模式,权限受限。

​FIQ模式 (Fast Interrupt)​​:为处理高速数据传输的中断而设计。

​IRQ模式 (Interrupt)​​:用于处理普通中断。

​管理模式 (Supervisor)​​:CPU复位或执行SWI指令后进入的操作系统保护模式。

​中止模式 (Abort)​​:当存取异常时进入,用于处理内存访问错误。

​未定义模式 (Undefined)​​:当执行未定义指令时进入。

​系统模式 (System)​​:运行特权级操作系统任务的特权模式

五、异常向量表

异常向量表是一块固定的内存地址区域(0x0000 0000,0xFFFF 0000)

存放着各种异常处理程序的入口地址

它是CPU硬件与软件异常处理程序之间的桥梁,是操作系统实现中断管理和错误处理的基础机制。

工作原理

当发生异常(如中断、复位、执行未定义指令等)时,CPU会自动跳转到向量表中对应的固定地址去执行指令。每个异常类型在表中有且仅有一个占位。

异常向量表地址分配

0x00:复位(Reset)

0x04:未定义指令(Undifined Instruction)

0x08:软件中断(SWI)

0x0C:指令预取中止(Prefetch Abort)

0x10:数据访问中止(Data Abort)

0x18:IRQ中断

0x1C:FIQ中断​

相关推荐
武文斌7711 小时前
ARM工作模式、汇编学习
汇编·嵌入式硬件·学习·arm
christine-rr3 天前
CPU架构的演进:从冯·诺依曼到未来计算
架构·arm·cpu
大聪明-PLUS3 天前
像 Docker 一样创建虚拟网络
linux·嵌入式·arm·smarc
jzzy_hony5 天前
移植Qt4.8.7到ARM40-A5
qt·ubuntu·arm·终端
漫步企鹅1 个月前
【VS Code - Qt】如何基于Docker Linux配置Windows10下的VS Code,开发调试ARM 版的Qt应用程序?
linux·qt·docker·arm·vs code·开发调试
普中科技1 个月前
【普中STM32精灵开发攻略】--第 11 章 SysTick系统定时器
stm32·单片机·嵌入式硬件·物联网·arm·普中科技
普中科技1 个月前
【普中STM32精灵开发攻略】--第 10 章 STM32位带操作
stm32·单片机·嵌入式硬件·物联网·arm·普中科技·位带操作
普中科技1 个月前
【普中STM32精灵开发攻略】--第 7 章 库函数模板创建
stm32·单片机·嵌入式硬件·物联网·arm·普中科技
亿道电子Emdoor1 个月前
【ARM】MDK自动备份源文件
arm开发·单片机·嵌入式硬件·arm