基于时间片轮询的一个简单任务调度器。
不涉及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 */
}