一.Cortex-M4
Cortex-M4中Systick的重要性
Cortex-M4中中断管理
Cortex-M4中影子栈指针
Cortex-M4中SVC和pendSV异常
1.Cortex-M4中Systick的重要性
在我看来,systick就是进行调度的时钟,他默认设置是1000HZ,就是1ms判断一次任务切换。
2.Cortex-M4中中断管理
Cortex-M4 内核支持 256 个中断,其中包含了 16 个内核中断和 240 个外部中断,并且具有256 级的可编程中断优先级设置。但 STM32F4 并没有使用 Cortex-M4 内核的全部东西,而是只用了它的一部分。
Cortex-M4处理器中,每一个外部中断都可以被使能或者禁止,并且可以被设置为挂起状态或者清除状态。
以下为中断向量表:
三个关键中断:
1.SVCall:启动调度
2.PendSV:上下文切换,也可以叫可挂起的系统服务
3.Systick:调度的时钟,按照设定的频率判断是否调度
注:Cortex-M4寄存器组——特殊寄存器
xPSR:组合程序状态寄存器,该寄存器由三个程序状态寄存器组成
(1)应用PSR(APSR) : 包含前一条指令执行后的条件标志
(2)中断PSR(IPSR) : 包含当前ISR的异常编号
(3)执行PSR(EPSR) : 包含Thumb状态位
(1)PRIMSK:中断屏蔽特殊寄存器。中断屏蔽字
(2)CONTROL:控制寄存器,权选择,栈选择
[PRIV]: 为0,处理器处于线程模式的特权级,为1为非特权级
[SPSEL] : 为0时,线程模式使用MSP,为1时使用PSP
注意:处理器模式时,固定使用MSP
3.Cortex-M4中影子栈指针
模式切换如下图:
MSP与PSP
1.进入异常时,使用MSP
2.退出异常时,使用MSP或者PSP
3.特权线程使用MSP,非特权线程使用PSP
具体看下面几个图
注意:以下为MSP与PSP模式的区别
4.Cortex-M4中SVC和pendSV异常
SVC特点:
1.响应快2.中断不可内部嵌套
作用:非特权操作硬件设备的方法
SVC为启动,PendSV为上下文切换,Systick为调度时钟
以上为上下文切换的流程,硬件自动保存一些东西,软件再保存一些数据与寄存器的东西。切换到下一个任务反转即可。
二。多任务调度原理
多任务启动(代码流程)
SVC业务流程(代码流程)
PendSV业务流程(代码流程)
1.多任务启动
2.SVC业务流程
3. PenSV业务流程
三。系统时钟节拍详解
SysTick初始化
SysTick中断服务函数
SysTick任务调度
1.SysTick初始化
2.SysTick中断服务函数
3.SysTick任务调度
四。系统延时函数应用
系统延时API详解
相对延时与绝对延时的区别
相对延时与绝对延时应用
1.系统延时API详解
2.相对延时与绝对延时的区别
3.相对延时与绝对延时应用(实验)
3.1Cubemx创建工程(上一个基础上)
(1)创建一个任务,注意与串口的优先级一样,这样不会抢占
vTaskDelayUntil使能
(2)代码与结果
综上,osDelay(vTaskDelay)是相对延迟,vTaskDelayUntil是绝对延迟,区别就是相对延迟是独立的,确定的,即设置延迟5s就延迟5s。绝对延迟是保证这个任务一次循环所需要的时间,即程序运行3s一循环,但是要满足5s绝对延迟,所以需要补充2s延时。
五。系统延时函数实现原理
vTaskDelay
vTaskDelayUntil
vTaskSuspendAll/xTaskResumeAll
1.vTaskDelay
2.vTaskDelayUntil
3.vTaskSuspendAll/xTaskResumeAll
(1)vTaskSuspendAll
(2)xTaskResumeAll