FreeRTOS上下文切换问题--pendSV和Systick优先级为什么要设定为最低

前言

在学习FreeRTOS时,到了任务调度学习的时候,都会碰到将pendSV异常和Systick异常的优先级设定为最低的语句,如下:

	/* Make PendSV and SysTick the lowest priority interrupts. */
	portNVIC_SYSPRI2_REG |= portNVIC_PENDSV_PRI;
	portNVIC_SYSPRI2_REG |= portNVIC_SYSTICK_PRI;

这两句就是将控制pendSV和Systick异常的内核SCB外设,关于控制这两个异常的优先级寄存器的对应位设置为15的优先级,也就是最低的优先级。

问题在于,只是看代码的话不知道为什么将他们两个设置为最低优先级,笔者看了野火和正点原子的FreeRTOS的开发手册,只是照着源代码说这两个要设置为最低,并且解释了这两个优先级是通过哪个寄存器来设置的优先级。真正要理解为什么要这样设置,可能还是要对照着《CM3权威指南》中的第七章-异常-7.6 SVC和PendSV来理解。

SysTick异常

CM3处理器的异常向量表中的前16个内容包含了所有的内核级别的异常,笔者关于异常和中断的文章中解释过,不能简单的把异常和中断统称为中断,不利于对CM3的异常系统的理解。

SysTick处于异常中最末位,优先级是可编程的,这点也意味着它的优先级可以人为的设置,也正因为这点,在设计RTOS的时候利用它很好的解决了实时性的问题。

在一个没有外部中断的系统中,我们利用SysTick异常周期性出现的特点,对一个具有两个任务的系统进行任务的来回切换。通俗的说,就是有个两个任务,任务A和任务B。在SysTick发生的周期下,每发生一次SysTick异常,就从A切换到B,或者从B切换到A。此时SysT

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值