时间片轮询的任务调度方法(二)
调度器设计思路
在上篇文章末,对时间调度的基本结构进行抽象。
一个时间片轮询任务调度器(定时器调度),包括任务函数(func)、任务执行间隔(interval)、上次执行时间(last_time)三个核心参数。
然后将所有待执行的任务节点(time_node)放到任务链表中。
由上面的几个参数组成了调度器的数据结构:
struct time_task
{
uint32_t last_time; //上次执行时间
uint32_t interval; //执行间隔
void *para; //任务参数
void (*func)(void * arg); //任务函数
enum TIME_MODE flag; //执行模式
struct list_head time_node; //链表节点
};
注册任务
当开始一个任务时,首先注册一个任务节点,将相关信息添加到节点中。
在代码中具体实现为,申请一块内存保存任务信息(struct time_task):
/*注册任务,创建结构体进行赋值*/
time_task_t time_task_register(uint32_t interval, void (*func)(void *arg), void *para, TIME_MODE flag)
{
assert(func);
time_task_t task = malloc(sizeof

本文介绍了一种基于时间片轮询的任务调度方法,通过结构化的任务管理方式实现了任务的周期性和一次性执行。该调度器能够有效组织多个任务并确保它们按照预定的时间间隔被执行。
最低0.47元/天 解锁文章
5653

被折叠的 条评论
为什么被折叠?



