type
status
password
date
slug
summary
category
URL
tags
icon
4.1 为什么要了解硬件特性
RTOS作为系统软件,运行时必然与硬件相关,e.g.
① 任务切换时寄存器的保存② 异常处理③ 内核时钟节拍来自硬件定时器
4.2 内核概述
Cortex-M3内核是ARM公司开发的CPU内核。完整的MCU芯片集成了Cortex-M3内核及其他组件
4.3 内核特性介绍
4.3.1 工作模式及特权级别
硬件开始工作后,CPU会进入特定的工作模式。此小节主要介绍CPU的工作模式及相应模式下的特权级,课程中我们用了一幅图展示如下:
① 前台程序(中断服务程序)只能在特权级运行
② 后台程序可以根据需要切换权限级别
说明:特权级的不同通常体现在栈指针的使用上,用户级使用PSP;特权级使用MSP
4.3.2 寄存器组
注意:Cortex-M3有三个程序状态寄存器,分别是APSR(应用PSR)/ IPSR(中断PSR)/ EPSR(执行PSR)。这三个程序状态寄存器其实是一个三合一寄存器,即可以单独访问,也可以组合访问
4.3.3 Cortex-M3预定义的存储器映射
说明:Cortex-M3此处的地址空间映射由处理器内核设置,而非芯片厂商设置,这点有利于简化系统移植
4.3.4 堆栈
Cortex-M3使用递减栈,采用双堆栈机制
4.3.5 系统异常
4.3.5.1 系统异常列表
需要注意如下3种异常,① 复位、② PendSV、③ SysTick
4.3.5.2 进入异常
4.3.5.3 退出异常
说明:将进入异常时设置的特殊LR(即EXC_RETURN值)写入PC,就会进入异常返回流程
bit 3 | bit 2 | 含义 | EXC_RETURN数值 |
0 | 0 | 返回handler模式,因为handler模式只能运行在特权级,所以只能使用MSP | 0xFFFFFFF1 |
0 | 1 | 错误组合,handler模式无法使用PSP | |
1 | 0 | 返回thread模式,且使用MSP,即仍在特权级运行 | 0xFFFFFFF9 |
1 | 1 | 返回thread模式,且使用PSP,即在用户级运行 | 0xFFFFFFFD |
4.3.5.4 复位异常的响应
说明:复位异常发生后,CPU将0x00000000和0x00000004中的内容(即异常向量表的前2项)分别加载MSP和PC,即可开始执行。0x0000010赋值给PC,即启动引导代码的位置;0x20008000赋值给MSP,即MSP初始值
4.3.5.5 PendSV异常的响应
- 作用:在PendSV中执行RTOS上下文切换(即不同任务间的切换)
- 工作原理:配置为最低优先级,上下文切换的请求将自动延迟到其他的ISR都完成后才处理,并且可以被其他异常/中断抢占。
说明:如果在SysTick中断中发现需要进行任务切换,则只是标记PendSV异常,SytTick中断处理结束时仍然返回之前的ISR。最后当没有比PendSV优先级更高的异常/中断时,才进行任务切换
注意:这一流程的实现需要依赖Cortex-M3提供的NVIC硬件支持,这种可抢占的异常也体现了RTOS的实时特性
4.3.6 指令系统
Cortex-M3使用Thumb-2指令集,长度可为16位或32位。指令可以携带后缀,如有条件执行。下面仅介绍后续汇编代码中会使用到的指令。