FreeRTOS-任务调度

1.系统配置完成systick模块后,通常下每当产生一个systick中断就会运行SysTick_Handler。

2.分析void xPortSysTickHandler( void )

  a.通过操作寄存器basepri关闭一些中端

  b.通过xTaskIncrementTick判断是否需要进行一次任务切换

 c.打开在步骤a中关闭的中断

下面具体分析函数BaseType_t xTaskIncrementTick( void )

①:uxSchedulerSuspended:这个全局变量的意思是判断FreeRTO是否把所有任务挂起来(把所有任务挂起来调用的函数是uxSchedulerSuspended,这是uxSchedulerSuspended会置位TRUE

②:当任务没有挂起来的话,xTickCount加1,然后把现在的时间赋给xConstTickCount

③:判断是否时间溢出,若溢出的话1.交互延时列表和溢出延迟列表的内容; 2.重新定义下一个周期任务的阻塞时间

⑤:判断延迟列表是否为空。若为空则把下一个阻塞时间设置为最大值。(通常情况下不会跑到这的)

⑥、⑦:把延迟列表的第一个列表项取出来,获取其列表项值(延迟列表的列表项值是按照阻塞时间的大小排列的,阻塞时间最小的为第一个,依次排列。若第一个列表项的阻塞时间还没到,则其余的延迟列表中的列表项阻塞时间都没有到)

⑧:再次确认延迟列表的列表项是否真的超时

⑨:若延迟列表的第一个列表项没有超时,则重新分配阻塞时间

(10):把第一个阻塞时间到的列表项从延迟列表中取出

(11):如果该任务有阻塞事件,则把阻塞事件从延迟事件列表中取出

(12):把取出的任务放到就绪列表中

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值