前言:

这篇文章是一个短文,主要是对前一篇文章《通过链表深入理解FreeRTOS的任务调度机制》中启动第一个任务时msr control, r0这一句做一个解释,这里主要是牵扯到ARM Cortex M3内核的操作模式,随学随记, 希望煮包的总结对大家有点帮助~~~~

一、关于CONTROL寄存器和EXC_RETURN异常返回值的一些讨论总结

在复位后,处理器进入线程模式+特权级

介绍:CONTROL是一个寄存器,用bit0和bit1两个bit位产生的控制效果分别是当前处理器的操作模式(0->特权级,1->用户级)和所使用的堆栈指针(0->MSP,1->PSP);与handler模式和线程模式搭配组成了三种当前代码运行时,处理器的模式(handler模式+特权级,线程模式+特权级,线程模式+用户级),以下是各种模式之间的转换图:

注意:特权级可以直接操作CONTROL寄存器回到用户级,用户级必须触发异常,在异常服务例程中才可修改CONTROL寄存器,异常返回后便可以达到用户级->特权级的切换;

EXC_RETURN是一个32位的异常返回值,高28位全为1,由低四位起控制作用,关于EXC_RETURN的三个合法值如下图:

1.0xFFFF_FFF1:中断嵌套;

2.0xFFFF_FFF9:中断回MSP

3.0xFFFF_FFFFD:中断回PSP

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐