剩余寄存器

← 返回 Cortex-M4内核原理 | ← 主页


仅收口不在主线重点展开的 Cortex-M4 内核寄存器。外设寄存器按 GPIO、DMA 等模块学习。

类别寄存器用途学习优先级
浮点数据S0~S31单精度浮点操作数与结果;每两个 S 寄存器可组成一个双精度 D0~D15知道即可
浮点状态FPSCR舍入模式、异常标志、浮点比较结果知道即可
FPU 控制CPACR开启协处理器 CP10/CP11,即开启 FPU 访问会配置
FPU 上下文FPCCRFPCARFPDSCR自动/惰性压栈控制、浮点栈帧地址、默认浮点状态RTOS/FPU 时再查
程序状态APSREPSRIPSR分别记录运算标志、Thumb/IT 执行状态、当前异常号见特殊寄存器
双栈指针MSPPSP主栈与进程栈;通过 SP 访问当前选中的一根见 CPU 通用寄存器组

FPU

  • Cortex-M4F 或具体芯片带 FPU 时才有上述浮点寄存器;纯 Cortex-M4 没有 FPU。
  • 裸机通常由编译器使用 S0~S31,无需手写访问。
  • FreeRTOS 任务使用浮点运算时,需确认端口层已处理 FPU 上下文保存;否则任务切换后浮点结果会损坏。
/* STM32F4 等带 FPU 的芯片:允许访问 CP10、CP11 */
SCB->CPACR |= (0xFU << 20U);
__DSB();
__ISB();

“影子寄存器”

  • ARM-A/R 架构存在按处理器模式切换的 banked registers(常被称为影子/分组寄存器)。
  • Cortex-M4 没有这类分组的通用寄存器;异常现场通过硬件压栈保存,而非切换一组 R0~R12
  • MSP/PSP 是两根独立的栈指针,容易被误认为影子寄存器,但用途不同。