- 打卡等级:初来乍到
- 打卡总天数:5
- 最近打卡:2025-05-24 17:45:02
已绑定手机
注册会员
- 积分
- 79
|
发表于 2025-5-18 18:25:15
|
显示全部楼层
第八集:定时器周期性任务的应用与实现
跟着打了一遍代码,感觉有种单片机系统的感觉。
就是任务调度那种感觉。
总的来说,第八集强调了代码的规范性,和当有大量代码的时候,
如何单每一个模块的代码进行分开保存和处理。
下面是我觉得这节课最重要的结构体任务调度代码
static TASK_COMPONENTS Task_Comps[]=
{
//状态 计数 周期 函数
{0, 300, 300, LED0_Blink}, /* task 1 Period: 300ms */
{0, 600, 600, LED1_Blink}, /* task 1 Period: 600ms */
{0, 900, 900, LED2_Blink}, /* task 1 Period: 600ms */
{0, 10, 10, KEY_Task}, /* task 1 Period: 600ms */
};
u8 Tasks_Max = sizeof(Task_Comps)/sizeof(Task_Comps[0]);
// 函数: Task_Handler_Callback
// 描述: 任务标记回调函数.
void Task_Marks_Handler_Callback(void)
{
u8 i;
for(i=0; i<Tasks_Max; i++)
{
if(Task_Comps[i].TIMCount) /* If the time is not 0 */
{
Task_Comps[i].TIMCount--; /* Time counter decrement */
if(Task_Comps[i].TIMCount == 0) /* If time arrives */
{
/*Resume the timer value and try again */
Task_Comps[i].TIMCount = Task_Comps[i].TRITime;
Task_Comps[i].Run = 1; /* The task can be run */
}
}
}
}
// 函数: Task_Pro_Handler_Callback
// 描述: 任务处理回调函数.
void Task_Pro_Handler_Callback(void)
{
u8 i;
for(i=0; i<Tasks_Max; i++)
{
if(Task_Comps[i].Run) /* If task can be run */
{
Task_Comps[i].Run = 0; /* Flag clear 0 */
Task_Comps[i].TaskHook(); /* Run task */
}
}
} |
|