17141200320 发表于 2024-12-6 11:22:49

AI8051U实验箱第八集视频结构体和指针函数回调问题

请教下各位老师

AI8051U实验箱第八集视频结构体和指针函数回调问题

1、u8 Tasks_Max = sizeof(Task_Comps)/sizeof(Task_Comps);      sizeof(Task_Comps) 是多大值,sizeof(Task_Comps是多大值?

2、指针函数是怎么回调的?

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},      /* 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);


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 */
}
}
}
页: [1]
查看完整版本: AI8051U实验箱第八集视频结构体和指针函数回调问题