M3处理器支持两种处理器的工作模式,还支持两级特权操作。
两种工作模式: 处理模式 handler mode
线程模式 thread mode。
引入两个模式的本意,在于区别普通应用程序代码和异常服务程序,包括中断服务程序代码
M3的特权分级 : 特权级 用户级,这可以提供一种存储器访问的保护机制,这也是一个基本的安全模型。
当处理器运行主应用程序时(线程模式),既可以使用特权级,也可以使用用户级,但是异常服务程序必须在特权模式下执行。复位后,处理器默认进入线程模式,特权级访问。在特权级下,程序可以访问所有的存储器空间(除非被MPU设置禁用) ,并且可以执行所有指令。
特权级 用户级
-----------------------------------
异常程序代码 | 处理模式 | x错误的用法 |
-----------------------------------
主应用程序代码 | 线程模式 | 线程模式 |
特权等级和栈指针的选择均有CONTROL负责,当CONTROL[0]=0=选择特权级,在异常处理的始末,只发生了处理器模式的转换
从 线程模式(特权级) -->处理模式(特权级)---> 线程模式(特权级)
但若CONTROL[0]=1, 线程模式+用户级,则在中断响应的始末,处理器模式和特权等级都要发生变化
从 线程模式(用户级) --> 处理模式(特权级) --> 线程模式(用户级)
CONTROL[0]只有在特权级下才能访问。用户级的程序若想进入特权级,通常都是使用一条系统服务呼叫指令SVC System Service Call来触发SVC异常,该异常的服务程序可以视具体情况而修改CONTROL[0]
阅读(2503) | 评论(0) | 转发(0) |