- 打卡等级:偶尔看看III
- 打卡总天数:33
- 最近打卡:2025-05-06 14:43:53
超级版主
- 积分
- 2401
|
发表于 2025-1-6 10:56:15
|
显示全部楼层
打卡!跟着冲天哥学习AI8051U的第Day 8!
学习AI8051定时器任务调度方法!
1.周期性任务介绍


2.(.c/.h)文件创建

3.结构体数组的周期性任务调度(重点!)

Task.c
- static TASK_COMPONENTS Task_Comps[]=
- {
- //状态 计数 周期 函数
- {0, 1, 1, Sample_Display}, /* task 1 Period: 1ms */
- {0, 10, 10, Sample_MatrixKey}, /* task 2 Period: 10ms */
- {0, 10, 10, Sample_adcKey}, /* task 3 Period: 10ms */
- {0, 300, 300, Sample_NTC}, /* task 4 Period: 300ms */
- {0, 500, 500, Sample_RTC}, /* task 5 Period: 500ms */
- /* Add new task here */
- };
- u8 Tasks_Max = sizeof(Task_Comps)/sizeof(Task_Comps[0]);
- //========================================================================
- // 函数: Task_Handler_Callback
- // 描述: 任务标记回调函数.
- // 参数: None.
- // 返回: None.
- // 版本: V1.0, 2012-10-22
- //========================================================================
- 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 */
- }
- }
- }
- }
- //========================================================================
- // 函数: Task_Pro_Handler_Callback
- // 描述: 任务处理回调函数.
- // 参数: None.
- // 返回: None.
- // 版本: V1.0, 2012-10-22
- //========================================================================
- 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 */
- }
- }
- }
复制代码 Task.h
- #ifndef __TASK_H_
- #define __TASK_H_
- #include "config.h"
- //========================================================================
- // 本地变量声明
- //========================================================================
- typedef struct
- {
- u8 Run; //任务状态:Run/Stop
- u16 TIMCount; //定时计数器
- u16 TRITime; //重载计数器
- void (*TaskHook) (void); //任务函数
- } TASK_COMPONENTS;
- //========================================================================
- // 外部函数和变量声明
- //========================================================================
- void Task_Marks_Handler_Callback(void);
- void Task_Pro_Handler_Callback(void);
- #endif
|
|