找回密码
 立即注册
查看: 350|回复: 1

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

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:148
  • 最近打卡:2025-06-27 21:54:24
已绑定手机

6

主题

120

回帖

573

积分

高级会员

积分
573
发表于 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[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 */
            }
        }
    }
}


任务函数

void LED1_Blink(void)
{
        State2 = !State2;
        P01 = State2;
}

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


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

学习
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:471
  • 最近打卡:2025-06-27 10:50:20

33

主题

2437

回帖

5186

积分

论坛元老

积分
5186
发表于 2025-2-22 09:59:30 | 显示全部楼层

上面那个所谓的任务回调函数,干的是在定时器中断中对计数值操作的活,,当某个任务的run被置1了之后,应该在主函数里面有一个轮询这个标志位的代码,再执行结构体中的函数指针。这个函数指针指向的就是下面两个任务函数。

参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-6-28 23:48 , Processed in 0.966292 second(s), 53 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表