Ucosii任务调度

为了提高查找任务就绪表的速度,建立了一个常量数组和任务就绪表,如图:

图1

图2

1是从rt-thread中截取的,没错rt-thread的任务调度就是模仿ucosii的。如果没有常量表,在不用前导0命令CLZ的情况下,只能通过循环的形式搜索就绪表中的最高任务优先级。所以个人认为搜索任务的实时性受到微小干扰,是否影响实时性还有待继续深究。Freertos是实时跟踪最高优先级就绪任务,搜索最高优先级就绪任务时只判断该优先级列表是否为空(几乎不可能出现),为空就往下一级,所以freertos不用这些位图。这个常量数组是美国的科学家研究得出的。

图2是任务就绪表示意图,来自ucosii入门教程(任哲).ppt,ucosii搜索任务用的原理大概就是这个图所表现的,详情请翻阅ppt 37页。

关键函数:

OS_Sched():任务级调度器;查找最高级就绪任务,如果就绪任务表有比当前任务高级的就触发中断(由汇编函数OS_TASK_SW()触发),然后在PendSV中断里进行切换任务;

OS_SchedNew():实现查找最高级就绪任务算法,供OS_Sched()调用;

OSCtxSw:触发PendSV中断,供OS_Sched()调用。

OSPendSV:中断函数,由汇编代码实现任务的切换

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值