YangHY 发表于 2025-12-22 17:05:42

注意,把下面


typedef struct
{
        u8 Run;               //任务状态:1--Run/0--Stop
        u16 TIMCount;         //定时计数器,TIMCount变成0的时候,把Run置1
        u16 TRITime;          //重载计数器
        void (*TaskHook) (void); //任务函数
} TASK_COMPONENTS;   

注意:

这个定义结构体的函数从task.c 挪动到task.h,目的是为了在task.c和task.h这2

哥文件中都能正常使用结构体TASK_COMPONENTS,如果只是放在task.c ,那么

task.h里就没法用结构体TASK_COMPONENTS,编译就会报错

YangHY 发表于 2025-12-22 17:11:20

那么计时函数,要放在定时器1ms的中断函数才符合逻辑“

void Timer0_Isr(void) interrupt 1                //1MS执行一次
{

        Task_Marks_Handler_Callback();                                        //系统计时

}

毕竟是按每毫秒处理1次的:

//========================================================================
// 函数: 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假如不为0
      {
            Task_Comps.TIMCount--;   // Time counter decrement 计数变量--
            if(Task_Comps.TIMCount == 0) // If time arrives 假如计数变量为0
            {
                /*Resume the timer value and try again */
                Task_Comps.TIMCount = Task_Comps.TRITime; //d对应变量重新装载初值
                Task_Comps.Run = 1;      //The task can be run Run标志位置1
            }
      }
    }
}

YangHY 发表于 2025-12-22 17:14:03

而下面的函数:

void Task_Pro_Handler_Callback(void)

要放在主循环里:

//========================================================================
// 函数: 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 */
      }
    }
}

YangHY 发表于 2025-12-22 17:15:10

我们直接放在主循环的后面:

YangHY 发表于 2025-12-22 17:33:21

记得去掉void!

下面复习一下:

YangHY 发表于 2025-12-22 17:34:45

接着是按键,不能长时间延时!

YangHY 发表于 2025-12-22 17:36:20

接着是文件的创建:

YangHY 发表于 2025-12-22 17:37:06

记得添加路径:

YangHY 发表于 2025-12-22 17:37:59

最重要的是周期性任务调度:

YangHY 发表于 2025-12-22 17:38:37

包括结构体的定义:

页: 19 20 21 22 23 24 25 26 27 28 [29] 30 31 32 33 34 35 36 37 38
查看完整版本: 第一课 序言《AI8051U的特点》