boot compile
基础概念
Thumb 指令
Thumb 指令集是 ARM 架构为了解决代码密度(Code Density)问题而设计的一种压缩指令集.
SCB
在 ARM Cortex-M 微控制器开发中,CORTEX_SCB_VTOR(或在 CMSIS 标准库中常见的 SCB->VTOR)里的 SCB 是 System Control Block(系统控制块)的缩写
SCB 是 ARM Cortex-M 处理器内核中一个非常核心的寄存器组和功能模块(位于系统控制空间 SCS 中)。它负责提供系统的配置、控制以及异常/中断状态的报告
通过 SCB,可以配置或获取以下系统级信息:
- CPU ID 与版本(CPUID 寄存器):识别是 Cortex-M3、M4 还是 M7,以及它的修订版本
- 中断与异常控制(如 SHCSR、AIRCR 等):控制系统异常的使能、优先级分组、软件复位系统等
- 功耗与睡眠模式(SCR 寄存器):配置睡眠深度(Sleep-on-exit、Sleepdeep 等)
- 向量表位置(VTOR 寄存器)
CMSIS 标准库
CMSIS 全称是 Cortex Microcontroller Software Interface Standard(Cortex 微控制器软件接口标准)
它是由 ARM 公司与各大半导体厂商(如 ST、NXP、TI、Infineon 等)联合制定的一套独立于厂商的硬件抽象层规范。简单来说,它是连接上层应用程序与 ARM Cortex-M 处理器内核及外设的“标准翻译官”。
在没有 CMSIS 之前,不同芯片厂商的 Cortex-M 芯片在寄存器命名、中断向量定义、启动代码上五花八门,极大地阻碍了代码的跨平台移植。CMSIS 的出现彻底统一了这一标准。
CMSIS 并不是单一的一个库,而是一个庞大的生态体系,主要包含以下几个核心模块:
CMSIS-Core(核心层 —— 最常用)
作用:直接与 Cortex-M 内核交互。它定义了访问内核寄存器、NVIC(嵌套向量中断控制器)、SysTick 定时器、SCB(系统控制块,如你之前问过的 VTOR)的标准接口。
特点:无论你用的是 ST 的 STM32 还是 NXP 的 LPC,其内核部分的访问方式(如 __WFI()、NVIC_EnableIRQ())在 CMSIS-Core 中是完全一致的。通常由 core_cm7.h、core_cm4.h 等文件实现。CMSIS-DSP(数字信号处理库)
作用:提供了一套高度优化的数字信号处理函数库,包含矩阵运算、向量数学、滤波(FIR/IIR)、变换(如 FFT)等。
特点:针对 ARM Cortex-M 内核的 SIMD(单指令多数据) 指令和硬件 FPU(浮点单元) 进行了极致的汇编优化,性能远超普通的 C 语言实现(非常适合你目前从事的 DSP 开发)。CMSIS-RTOS / CMSIS-RTOS2(实时操作系统 API 标准)
作用:为各种实时操作系统(如 FreeRTOS、Keil RTX、ThreadX)定义了一套统一的 API 标准。
特点:如果你的软件基于 CMSIS-RTOS 编写,理论上可以做到底层 RTOS 内核的无缝切换,而上层应用代码无需大改。CMSIS-Driver(外设驱动接口标准)
作用:定义了底层外设(如 UART、SPI、I2C、Ethernet、USB 等)的通用驱动接口。
特点:方便上层中间件(如网络栈、文件系统)直接调用,而不用关心底层芯片具体是哪家厂商的。CMSIS-NN(神经网络库)
作用:专为 Cortex-M 边缘端 AI 推理设计的高效神经网络算子库(如卷积、激活函数等),用于实现轻量级机器学习。
代码段划分
.data
.data 保存有初始值的全局变量和静态变量。标准启动流程会把这些变量从映像中的加载地址 LMA 复制到运行地址 VMA。
.bss
.bss 是未显式初始化,按 C 语言规则应在启动时为零的全局变量和静态变量所在区域。

