没志青年
发布于 2025-12-30 / 18 阅读
0

Cortex-M 代码级别和运行模式

运行模式

  • Thread Mode:线程模式,特权级线程模式(RTOS 启动阶段,用 MSP)、用户级线程模式(RTOS 任务,用 PSP)

  • Hanlder Mode:Handler 模式,该模式下一定是特权级别,用主栈 MSP。单片机执行中断服务程序时。

代码级别、运行模式存在的意义其实也是为了操作系统内核代码和用户代码的安全隔离!

因此,裸机下只使用主栈 MSP。

裸机方式下的代码一直都是在线程模式下运行的,而且还是特权模式。。

逻辑:特权级别下的线程模式。

代码级别

  • 特权级:没有限制,可访问所有地址。

  • 用户级:某些寄存器不能访问(NVIC 和 SCB 相关寄存器),否则会进入 hardfault 硬件错误中断。

单片机上电后处于特权模式,所写的裸机代码都是特权级。使用的是主栈。

rtos 的任务使用的是任务栈,在用户模式。

只有 Thread Mode 才有“权限之分” Handler Mode 永远是特权