Skip to content

Latest commit

 

History

History
49 lines (37 loc) · 1.31 KB

README.md

File metadata and controls

49 lines (37 loc) · 1.31 KB

X-Tasker

基于时间片轮询的一个简单任务调度器。
不涉及RTOS的抢占式任务调度。硬件资源只需定时器Timer,无需额外的任务堆栈。
任务数量由宏TASK_NUM指定,最大256。

实现

1. Task Tick

在Timer中断中调用void Task_Tick(void);

CubeMX生成的STM32 Project默认提供时基为1ms的SysTick。
void HAL_SYSTICK_Callback(void);中调用void Task_Tick(void);,即可实现时间周期为1ms的Task Tick。

2. Task Create

Task_Create函数中将任务函数传递给pTask,任务时间片传递给RunTime

3. Task Delete

Task_Delete函数中将任务函数传递给pTask

4. Task Init

Task_Init函数中调用Task_Create函数创建初始化任务。任务调用完毕后,调用Task_Delete函数删除已创建的函数。

5. Task Handle

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 */
}