FreeRTOS多任务调度器基础

  • Cortex-M4中SysTick调度器核心
  • Cortex-M4中的中断管理
  • Cortex-M4中影子栈指针
  • Cortex-M4中SVC和PendSV异常

1:Cortex-M4中SysTick调度器核心

-----systick每一次中断都会触发内核的调度-----
-->内核从就绪列表中去寻找优先级最高的任务------
--->从内核态恢复到任务态(上下文切换(栈的操作))

2:Cortex-M4中中断的管理
-----M4有256个中断(16个内核中断和240个外部中断):

  每一个中断都能被使能或禁止,并且可以设置成挂起或清楚状态

-----在中断异常向量表中操作系统会用到的中断:

  SVCall:用于启动,便于上下文的切换
  PendSV:上下文切换
  SysTick:功能如上

对于中断的管理,主要使用了两个寄存器:

1----PRIMSK中断屏蔽特殊寄存器(主要由FreeRTOS接管)
2----CONTROL控制寄存器:
	[PRIV]位为0时处理器处于线程模式的特权级,为1为非特权
	[SPSEL]位为0时,线程模式使用MSP,为1时使用PSP
	MSP为系统主栈,PSP为进程栈(影子栈)

临界段:

内核在操作时,不能被中途打断,需要屏蔽一些优先级高的中断
进入临界段,赋值寄存器,屏蔽一些中断
退出临界段,相应所有中断

3:Cortex-M4中影子栈指针
模式切换:

	系统启动默认使用MSP
	异常请求使用MSP,异常返回可以选择使用MSP或者PSP

在这里插入图片描述
在这里插入图片描述
4:Cortex-M4中SVC和PendSV异常
SVC异常:

1:非特权的用户任务,想要调用硬件接口,发出请求
2:使用操作系统给的API接口进行请求
3:系统收到请求后把驱动调过来响应请求
特性:响应快,中断不可内嵌

在这里插入图片描述
在这里插入图片描述

操作系统实时响应用户外部请求,不能被PendSV和SysTick打断
SVC异常产生后,把PendSV和SysTick优先级调到最低
因为SVC响应快,可以给用户提供快速响应,PendSV和SysTick优先级如果
还是很高,就会一直占用CPU,导致SVC请求被搁置

Cortex-M4中的上下文切换

进入PendSV
上:就是保留上一个任务的信息(压栈和入栈)
下:恢复下一个任务的信息(出栈)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

漏洞百出

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值