patch1582 发表于 2025-2-22 09:32:33

请问用定时器调用任务的程序段是什么样的逻辑,如何理解??

教程中结构体定义任务

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

任务回调函数
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 LED1_Blink(void)
{
        State2 = !State2;
        P01 = State2;
}

void LED2_Blink(void)
{
        State3 = !State3;
        P02 = State3;
}


请教高手,这三者之间是什么关系,之间是怎么调用的?

_奶咖君_ 发表于 2025-2-22 09:59:30

<p>上面那个所谓的任务回调函数,干的是在定时器中断中对计数值操作的活,,当某个任务的run被置1了之后,应该在主函数里面有一个轮询这个标志位的代码,再执行结构体中的函数指针。这个函数指针指向的就是下面两个任务函数。</p>
页: [1]
查看完整版本: 请问用定时器调用任务的程序段是什么样的逻辑,如何理解??