【RTOS】Cortex-M3内核

1.内核工作模式即权限级别

两种操作模式分别为:处理者模式(handler mode)线程模式(thread mode)。引入两个模式的本意,是用于区别普通应用程序的代码和异常服务例程的代码——包括中断服务例程的代码1
Cortex-M3 的另一个侧面则是特权的分级——特权级用户级。这可以提供一种存储器访问的保护机制,使得普通的用户程序代码不能意外地,甚至是恶意地执行涉及到要害的操作。处理器支持两种特权级,这也是一个基本的安全模型。
在 CM3 运行主应用程序时(线程模式),既可以使用特权级,也可以使用用户级;但是异常服务例程必须在特权级下执行。

2.寄存器组

2.1 通用寄存器

在这里插入图片描述

图1 Cortex-M3 处理器寄存器组

Cortex-M3 处理器拥有 R0-R15 的寄存器组。其中 R13 作为堆栈指针 SP。SP 有两个,但在同一时刻只能有一个可以看到,这也就是所谓的“banked”寄存器1
![-](https://img-blog.csdnimg.cn/65c49617896748ecbba79c4df2af8698.png

图2 keil仿真状态下内核寄存器状态
  • R0~R7,低组寄存器
  • R8~R12,高组寄存器
  • R13(SP):堆栈指针寄存器
  • R14(LR):存储子程序调用的返回地址
  • R15(PC):程序计数器

其中R13(SP),在 CM3 处理器内核中共有两个堆栈指针,于是也就支持两个堆栈,根据 CM3 处理器的特权级别选择使用MSP还是PSP:

  • MSP:主堆栈指针
  • PSP:进程堆栈指针

2.2 特殊功能寄存器

在这里插入图片描述

图3 程序状态寄存器(xPSR)描述
  • ①算术运算单元运算标志
  • ②T标志,必须置为1
  • ③当前异常的序号

2.3 中断屏蔽寄存器组

PRIMASK, FAULTMASK 和 BASEPRI,这三个寄存器用于控制异常的使能和除能,具体功能如图所示,
在这里插入图片描述

图4 中断屏蔽寄存器功能描述

其中PRIMASK寄存器置为1,总中断关闭。

3.存储映射

在这里插入图片描述

图5 CM3处理器存储映射

代码区:用于存放可执行代码、常量
SRAM区:用于存放堆栈、变量
基于CM3 处理器的单片机存储映射都需要遵循这个框架,仅有部分存储区域由单片机生产厂商根据其产品自定义。

4.堆栈

堆栈是一种存储器的使用模型。它由一块连续的内存和一个栈顶指针组成,用于实现“后进先出”的缓冲区。其最典型的应用,就是在数据处理前先保存寄存器的值,再在处理任务完成后从中恢复先前保护的这些值。
CM3 处理器使用的向下生长的满栈,采用双堆栈机制。

5.异常/中断处理

5.1 异常处理过程

进入异常后:
步骤一:硬件会将xPSR、PC、LR、R12,R0~R3自动压入堆栈,其他寄存器在中断服务函数中根据需要保存
步骤二:从中断向量表中取当前异常的入口地址
步骤三:执行异常与中断的处理程序

退出异常:
步骤一:执行返回指令,BX LR
步骤二:恢复先前入栈的寄存器,堆栈指针的值也需要修改回去
步骤三:从原中断发生的位置继续向下执行

5.2 PendSV异常

用于RTOS上下文切换,优先级最低,等待所有的中断执行完毕之后然后在执行,并且可被其他中断抢断;
RTOS需要执行任务切换时,软件触发PendSV异常,在中断服务函数中将寄存器压入堆栈,实现对现场保护,只要将这个任务中对应的堆栈中所保存的寄存器的值恢复,即可返回原来的任务运行。
在这里插入图片描述

图6 使用 PendSV 控制上下文切换流程

6.指令集

Thumb-2指令集,长度可以为16、32。RTOS任务切换保存寄存器需要用到汇编进行操作。以下是需要用到的一些汇编指令。
在这里插入图片描述

图7(a) 汇编指令

在这里插入图片描述

图7(b) 汇编指令

参考


  1. Cortex-M3 权威指南 ↩︎ ↩︎

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值