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

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

[复制链接]
  • 打卡等级:常住居民II
  • 打卡总天数:95
  • 最近打卡:2025-05-01 09:02:58
已绑定手机

5

主题

66

回帖

228

积分

中级会员

积分
228
发表于 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
  • 打卡总天数:435
  • 最近打卡:2025-04-30 08:43:23

33

主题

2351

回帖

4860

积分

论坛元老

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

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

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

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 02:32 , Processed in 0.121127 second(s), 53 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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