文档介绍:: .
CM3在内核水平上搭载了若干特殊功能寄存器,包括:
①程序状态字寄存器组(PSR)
②中断屏蔽寄存器组(PRIMASK,FAULTMASK,BASEPRI)
③控制寄存器(CONTROL)
作模式和特权级别
Cortex-M3处理器支持两种处理器的操作模式,还支持两级特权操作。
两种操作模式分别为处理者模式(handlermode)和线 程模式(threadmode)。
引入两种模式的本意,是用于区别普通应用程序的代码和异常服务例程的代码-包括中断服务例程的代码。
两级特权操作分别为特权级和用户级。
这可以提供存储器访问的保护机制,使得普通用户的程序代码不能意外地,
甚至是恶意地执行涉及要害的操作。处理器支持两种特权级,这也是一个基本的
安全模型。
特权级 用户级
错误的用法
异常 handler的代码Handler 模式
主应用程序的代码 线程模式 线程模式
Cortex-M3下的操作模式和特权级别
在 CM3运行主应用程序时(线程模式),既可以使用特权级,也可以使用用
户级;
但是异常服务例程必须在特权级下执行。
复位后,处理器默认进入线程模式,特权级访问。在特权级下,程序可以访
问所有范围的存储器(如果有 MPU,还要在 MPU规定的禁地之外),并且可以执
行所有指令。
在特权级下的程序可以为所欲为,但也可能把子集给玩进去——切换到用户
级。一旦进入用户级,再想回来得就 走“法律程序”了——用户级的程序不能简
单地试图改写 CONTROL寄存器回到特权级,就 而必须先“申诉” :执行一条系统
调用指令(SVC),这回触发 SVC异常,然后由异常服务例程(通常是操作系统的
一部分)接管,如果批准了进入,则异常服务例程修改 CONTROL寄存器,才能在
用户级的线程模式下重新进入特权级。
其实,从用户级到特权级的唯一途径就是异常: 如果在程序执行过程中触发
了一个异常,处理器总是先切换入特权级,并且在异常服务例程执行完毕退出时,
返回先前的状态。
合法 的操作模式 转换图
通过引入特权级和用户级,能就 够在硬件水平上限制某些不受信任的或者还没有调试好的程序,不让它们随便地配置涉及要害的寄存器,因而系统的可靠性
得到了提高。进一步地,如果配了 MPU,它还可以作为特权机制的补充——保护
关键的存储区域不被破坏,这些区域通常是操作系统的区域。
举例来说,操作系统的内核通常都在特权级下执行,所有没有被 MPU禁掉的
存储器都可以访问。在操作系统开启了一个用户程序后,通常都会让它在用户级
下执行,从而使系统不会因某个程序的崩溃或恶意破坏而受损。
CM3在内核水平上搭载了一颗中断控制器——嵌套向量中断控制器
NVIC(NestedVectoredInterrupt Controller) 。它与内核有很深的“亲密接触”
——与内核是紧耦合的。
NVIC提供如下的功能:
●可嵌套中断支持
●向量中断支持
●动态优先级调整支持