好记性不如铅笔头

ARM, 操作系统

【转】Cortex-M3的工作模式和特权级别

本文转自【 https://blog.csdn.net/SlowIsFastLemon/article/details/104674031

CONTENTS

工作模式和权限级别分类

处理器的工作模式分为:thread modehandler mode两种。 处理器默认运行在Thread Mode下;当发生异常/中断发生时,硬件自动切换到Handler Mode模式,执行完相应的异常/中断处理程序后,再切换回thread mode模式。
两种特权级别包括特权级和用户级,两种特权级别是对存储器访问提供的一种保护机制;在特权级下,程序可以访问所有范围的存储器(如果有MPU,还要在MPU的禁地之外),并且能够执行所有指令;在用户级下,不能访问系统控制空间(SCS,包含配置寄存器及调试组件的寄存器),且禁止使用MSR访问特殊功能寄存器(APSR除外),如果访问,则产生fault;
在线程模式,可以是特权级,也可以是用户级;handler模式总是特权级的;在复位后,处理器处于线程模式+特权级。

特权级别的切换

在特权级下的代码可以通过置位CONTROL[0]来进入用户级。而不管是任何原因产生了任何异常,处理器都将以特权级来运行其服务例程,异常返回后将回到产生异常之前的特权级。用户级下的代码不能再试图修改CONTROL[0]来回到特权级。它必须通过一个异常handler,由那个异常handler 来修改CONTROL[0],才能在返回到线程模式后拿到特权级。
注意:在大多数RTOS的实现过程中,不管是thread mode和handler mode只会使用特权级一种形式。异常/中断运行于Handler Mode,各个任务的代码运行于Thread Mode,这个过程由硬件自动切换。无论是异常/中断/任务,均运行于特权级下(硬件启动后的缺省级别)。

发表评论

10 − 8 =

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据