Cortex -M3 用户级与特权级切换 及 MPU的使用

特权级、用户级间的切换:

    程序特权级可以访问所有的存储器,而在用户级时便有所限制,以此来保护系统不被一些程序给破坏;

在特权级下只需通过修改CONTROL寄存器的第0位,置为1则进入用户级;当用户级要进入特权级则需要先进入handler模式(异常模式),在handler中配置CONTROL第0位置为1则可以回到特权级;在用户级是无法操作CONTROL寄存器的。

下表是CONTROL寄存器的两个位的功能:

 

CONTROL[1] 堆栈指针选择
0=选择主堆栈指针 MSP(复位后缺省值)
1=选择进程堆栈指针 PSP
在线程或基础级(没有在响应异常——译注),可以使用PSP。在handler模式下,
只允许使用 MSP,所以此时不得往该位写1。
CONTROL[0] 0=特权级的线程模式
1=用户级的线程模式
Handler 模式永远都是特权级的。

 

特殊功能寄存器不存在地址,只能被专用的MSR和MRS指令访问。

使用方式:

MRS   <gp_reg> , <special_reg>;  读特殊功能寄存器的值到通用寄存器;

MSR   <special_reg>   , <gp_reg>;  写通用寄存器的值到特殊功能寄存器; 其中<gp_reg>是通用寄存器,<special_reg>是特殊寄存器;

     程序启动后,线程模式会在CONTROL的指引下进入从特权级转为用户级运行,如果在用户级下面MSR命令自然是不能更改CONTROL特权的,那么如何解决?   

刚才表格中说了handler模式下肯定是特权级的,那么我们就利用handler模式来解决这个问题。 在中断处理的时候(handler mode),加入代码&

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值