实例:
uint8_t task_num=0; //任务序列号
uint8_t led_ctrl;
//调度结构体
typedef struct{
void (*func) (void); //任务函数
uint32_t rast_time; //运行周期ms
uint32_t last_run; //上次运行时间
}Task_t;
//被调度的函数
void LED_proc()
{
led_ctrl^=0x01;
LED_Display(led_ctrl);
}
//任务列表
static Task_t Scheduler_Task[]=
{
{LED_proc,200,0}
//这里有众多任务
};
//任务初始化函数
void Scheduler_Init()
{
task_num = sizeof(Scheduler_Task)/sizeof(Task_t);//获取任务个数
}
//任务运行函数
void Scheduler_Run()
{
for(uint8_t i=0;i<task_num;i++)
{
uint32_t now_time = uwTick;
if(now_time >= Scheduler_Task[i].rast_time + Scheduler_Task[i].last_run)
{
Scheduler_Task[i].last_run = now_time;
Scheduler_Task[i].func();
}
}
}
void LED_Display(uint8_t Pin)
{
HAL_GPIO_WritePin(GPIOC,0xff00,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOC,Pin<<8,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
}