一 、程序运行为什么要有用户级与特权级区分
用户级和特权级的实现是为了给存储器提供一种保护机制,让用户代码不能访问特定的存储区域。
只有特权级级代码才能有权限访问特定的存储区域。防止用户代码或者应用代码意外或恶意访问操作系统的数据存储区域。一般情况下特权级模式会配合MPU一起使用,通过MPU设定只有特权级才能访问的存储空间。
二、特权级与用户级作用的范围
中断应用程序必须是特权级的,主程序可以是特权级的也可以是用户级的。处理器复位后在特权级模式下运行。在特权级模式下可以通过修改CONTROL 寄存器进入用户级代码。用户级代码只能通过SVC中断,出发SVC异常才能重新进入特权级。
三、特权级作用范围及可操作的指令
MRS MSR 指令只可以在特权级模式下使用。需要通过MRS MSR访问的特殊功能寄存器,除了APSR可以在用户级访问:
NVIC的中断控制/状态寄存器都只能在特权级下访问。不过有一个例外——软件触发中断寄存器可以在用户级下访问以产生软件中断。软件触发中断寄存器允许设置的前提,是设置中断控制寄存器STIR。
三、特权级与用户级使用的栈指针
特权级可以使用MSP 和PSP指针
用户级可以使用PSP,能不能使用MSP不太清楚。
在异常处理函数中只能使用MSP