FreeRTOS 笔记之⑧:任务延时列表的实现

本文详细介绍了FreeRTOS的任务延时列表实现,包括工作原理和实现步骤。任务延时列表通过将延时任务从就绪列表移除并插入到延时列表中,根据xNextTaskUnblockTime判断任务是否到期,提高了系统效率。延时列表由两个部分组成,按延时时间升序排列,并在时基中断中检查xNextTaskUnblockTime,及时将到期任务设置为就绪状态。
摘要由CSDN通过智能技术生成

目录

1. 任务延时列表的工作原理

2. 实现任务延时列表

2.1 定义任务延时列表

2.2 任务延时列表初始化

2.3 定义xNextTaskUnblockTime


在本章之前,为了实现任务的阻塞延时,在任务控制块中内置了一个延时变量xTicksToDelay。每当任务需要延时的时候,就初始化xTicksToDelay需要延时的时间,然后将任务挂起,这里的挂起只是将任务在优先级位图表uxTopReadyPriority中对应的位清零,并不会将任务从就绪列表中删除。当每次时基中断(SysTick中断)来临时,就扫描就绪列表中的每个任务的xTicksToDelay,如果xTicksToDelay大于0则递减一次,然后判断xTicksToDelay是否为0,如果为0则表示延时时间到,将该任务就绪(即将任务在优先级位图表uxTopReadyPriority中对应的位置位),然后进行任务切换。这种延时的缺点是,在每个时基中断中需要对所有任务都扫描一遍,费时,优点是容易理解。这种方法其实也是大多数人的常规操作。之所以先这样讲解是为了慢慢地过度到FreeRTOS任务延时列表的讲解。

1. 任务延时列表的工作原理

在FreeRTOS中,有一个任务延时列表(实际上有两个,为了方便讲解原理,我们假装合并为一个,其实两个的作用是一样的),当任务需要延时的时候,则先将任务挂起,即先将任务从就绪列表删除,然后插入到任务延时列表,同时更新下一个任务的解锁时刻变量:xNextTaskUnblockTime的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值