- 打卡等级:以坛为家I
- 打卡总天数:269
- 最近打卡:2026-05-30 00:35:00
已绑定手机
中级会员
- 积分
- 448
|
发表于 2026-5-18 15:47:41
|
显示全部楼层
typedef struct
{
u8 Run; //任务状态:Run/Stop
u16 TIMCount; //定时计数器
u16 TRITime; //重载计数器
void (*TaskHook) (void); //任务函数
} TASK_COMPONENTS;
static TASK_COMPONENTS Task_Comps[]=
{
//状态 计数 周期 函数
{0, 300, 300, LED0_blink},
{0, 600, 600, LED1_blink},
{0, 900, 900, LED2_blink},
{0, 10 , 10 , key},
};
u8 Tasks_Max = sizeof(Task_Comps)/sizeof(Task_Comps[0]);
void Task_Marks_Handler_Callback(void)
{
u8 i;
for(i=0; i<Tasks_Max; i++)
{
if(Task_Comps.TIMCount) /* If the time is not 0 */
{
Task_Comps.TIMCount--; /* Time counter decrement */
if(Task_Comps.TIMCount == 0) /* If time arrives */
{
/*Resume the timer value and try again */
Task_Comps.TIMCount = Task_Comps.TRITime;
Task_Comps.Run = 1; /* The task can be run */
}
}
}
}
void Task_Pro_Handler_Callback(void)
{
u8 i;
for(i=0; i<Tasks_Max; i++)
{
if(Task_Comps.Run) /* If task can be run */
{
Task_Comps.Run = 0; /* Flag clear 0 */
Task_Comps.TaskHook(); /* Run task */
}
}
}
此为用结构体建立多任务调度主要函数:T0 1ms自动重装载作为任务调度基本时钟,主函数中调用Task_Pro_Handler_Callback();开启任务调度,中断中调用Task_Marks_Handler_Callback();时间计数增加 |
|