ARM_Cortex-M3内核结构(8)

发布时间:2021-06-07

特权级

用户级 主应用程序的代码

异常 handler 的代码

图 2.4 操作模式和特权等级

在线程模式+用户级下,对系统控制空间(SCS,0xE000E000~0xE000EFFF,包括NVIC、SysTick、

MPU以及代码调试控制所用的寄存器)的访问将被禁止。除此之外,还禁止使用MRS/MSR访问,除了APSR 之外的特殊功能寄存器。如果操作,则对于访问特殊功能寄存器的,访问操作被忽略;而对于访问SCS 空间的,将产生错误。

在特权级下不管是任何原因产生了任何异常,处理器都将以特权级来运行其服务例程,异常返回 后,系统将回到产生异常时所处的级别,同时特权级也可通过置位CONTROL[0]来进入用户级。用户级下 的代码不能再试图修改CONTROL[0]来回到特权级。它必须通过一个异常handler,来修改CONTROL[0], 才能在返回到线程模式后进入特权级。如图2.5所示。

特权级 handler

图 2.5 处理器模式转换图

把代码按特权级和用户级分开处理,有利于使Cortex-M3的架构更加稳定可靠。例如,当某个用

户 程序代码出问题时,可防止处理器对系统造成更大的危害,因为用户级的代码是禁止写特殊功能寄存器 和NVIC中寄存器的。另外,如果还配有MPU,保护力度就更大,甚至可以阻止用户代码访问不属于它的 内存区域。

在引入了嵌入式实时操作系统中,为了避免系统堆栈因应用程序的错误使用而毁坏,我们可以给 应用程序专门配一个堆栈,不让它共享操作系统内核的堆栈。在这个管理制度下,运行在线程模式的用 户代码使用PSP,而异常服务例程则使用MSP。这两个堆栈指针的切换是智能全自动的,在异常服务的始 末由Cortex-M3硬件处理。

如前所述,特权等级和堆栈指针的选择均由CONTROL负责。 当CONTROL[0]=0,在异常处理的始末,只发生了处理器模式的转换,如图2.6所示。 若CONTROL[0]=1(线程模式+用户级),则在中断响应的始末,处理器模式和特权等级都要发生变

化,如图2.7所示。 CONTROL[0]只有在特权级下才能访问。用户级的程序如想进入特权级,通常都是

使用一条“系

ARM_Cortex-M3内核结构(8).doc 将本文的Word文档下载到电脑

精彩图片

热门精选

大家正在看

× 游客快捷下载通道(下载后可以自由复制和排版)

限时特价:7 元/份 原价:20元

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219