基于时间片轮询的一个简单任务调度器。
不涉及RTOS的抢占式任务调度。硬件资源只需定时器Timer,无需额外的任务堆栈。
任务数量由宏TASK_NUM
指定,最大256。
在Timer中断中调用void Task_Tick(void);
。
CubeMX生成的STM32 Project默认提供时基为1ms的SysTick。
在void HAL_SYSTICK_Callback(void);
中调用void Task_Tick(void);
,即可实现时间周期为1ms的Task Tick。
Task_Create
函数中将任务函数传递给pTask
,任务时间片传递给RunTime
。
Task_Delete
函数中将任务函数传递给pTask
。
Task_Init
函数中调用Task_Create
函数创建初始化任务。任务调用完毕后,调用Task_Delete
函数删除已创建的函数。
在main.c
中的任务轮询中调用Task_Handle
函数。
void main(void)
{
while(1)
{
Task_Handle();
}
}
任务函数格式为void Task_Task1(void);
。
特殊用法:任务Task1中创建Task2后,删除Task3。
void Task_Task1(void)
{
Task_Create(Task_Task2, 200); /* 创建Task_Task2任务,时间片200ms */
Task_Delete(Task_Task3); /* 删除Task_Task3任务 */
/* other actions */
}