RTOS任务延时队列
处理任务延时的问题
当前处理任务延时是通过扫描任务数组来实现的,且无论任务有没有被延时,在每个时钟节拍都要扫描所有任务,这种方式比较耗时。在后期实现多任务相同优先级时,这种方式将更加耗时。
更加快速、简单的方法
将所有需要延时的任务单独放置在一个队列当中,每次发生系统时钟节拍时,只需要扫描这个延时队列即可,避免了扫描所有任务的耗时行为
方式一:独立保存延时时间
此方法在每个延时队列的结点中都独立保存该任务的延时时间,每次时钟节拍扫描整个延时队列将其进行递减。优点是插入延时队列比较简单快速,缺点是每个时钟节拍都要扫描整个延时队列,比较简单但比较慢。
方式二:递增的延时队列
此方法要求在插入延时队列时延时时间严格递增,每个任务的延时时间都要减去前面所有任务延时时间的总和。缺点是插入延时任务比较复杂,比较慢,好处是扫描队列非常快。
代码实现
由于本人算法比较薄弱,这里我选择第一种实现方式。
代码见此处改动部分
本文由作者按照 CC BY 4.0 进行授权