打印
[产品应用]

Cortex-M 级别转换

[复制链接]
9|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
eefas|  楼主 | 2025-6-19 09:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一、 简述
          Cortex-M 里面有特权级别的概念,不同级别可以设定不同的权限,如何转换特权级别基本是本章的内容。

二、操作模式
         ARM M 核操作模式有两个:
  • 线程(Thread)模式:在复位时或异常处理完成返回后进入此模式。此模式可以为特权,也可以为非特权.可使用任意栈指针(stack pointer)
  • 处理(Handler)模式:在进入异常处理时进入此模式,只有此模式才能从异常中退出。此模式总是特权的。只能使用主栈指针(main stack pointer)
注意: Reset 是异常的一种特殊形式,会以一种可能不可恢复的方式终止当前执行。

2.1 特权
         代码可以运行在特权和非特权运行,非特权执行限制或排除对某些资源的访问。特权可以访问所有资源。

         可以分为以下两种:
2.1.1 Supervisor
       在此特权下,可以往 CONTROL 寄存器的 bit0 位(nPRIV)写入 1,那么,就会进入非特权。




2.1.2 User
       在 User 级别下,可以调用 SCV 指令,进入Supervisor 异常,由于在 Handler模式下透视特权级别,所以可以在这里面往 CONTROL 寄存器的 bit0 位(nPRIV)写入 0,那么就可以进入特权模式。
       在 User 级别下,如果访问权限不允许的数据访问,会导致异常。如处于非特权下去访问一个设置为仅有特权才能访问的内存区域,那么就会发生 MemManage 异常。
       User 级别下,特殊寄存器(如 CONTROL)的访问被忽略。

       可以参考 Contex-M4,对此的限制为:
  • 对 MSR 和 MRS 指令限制访问
  • 不能访问系统定时器、NVIC 或系统控制块(SCB)
  • 可能对外设和内存有访问限制
注意:CONTROL 是特殊寄存器,需要是用 MSR 才能进行赋值,如 MSR CONTROL, r0。
需要用 MRS 才能赋值给通用寄存器,如:MRS r0, CONTROL。

三、参考文档
(1) ARM:《DDI0403E_d_armv7m_arm.pdf》


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

93

主题

3046

帖子

2

粉丝