找回密码
 立即注册
楼主: 电子DIY小家

《8051U深度入门到32位51大型实战视频》,【免费 + 包邮 送】实验箱@Ai8051U,100万套

   火... [复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:569
  • 最近打卡:2025-08-25 14:27:36
已绑定手机

3

主题

14

回帖

60

积分

注册会员

积分
60
发表于 2025-6-20 09:00:50 | 显示全部楼层
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:296
  • 最近打卡:2025-08-25 09:44:38

7

主题

290

回帖

855

积分

高级会员

积分
855
发表于 2025-6-20 20:22:59 | 显示全部楼层
今天还是第九集 数码管
回复

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:89
  • 最近打卡:2025-08-24 07:54:49
已绑定手机

2

主题

57

回帖

222

积分

中级会员

积分
222
发表于 2025-6-21 08:27:56 | 显示全部楼层
打卡学习
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:114
  • 最近打卡:2025-08-25 08:25:04
已绑定手机

0

主题

83

回帖

456

积分

中级会员

积分
456
发表于 2025-6-21 09:18:01 | 显示全部楼层
今日打卡
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:12
  • 最近打卡:2025-07-08 00:11:07
已绑定手机

1

主题

32

回帖

121

积分

注册会员

积分
121
发表于 2025-6-21 10:29:36 | 显示全部楼层
打卡
第八课:systick与task周期调度
结构体
typedef struct
{
    u8 Run;
    u16 TIMECont;
    u16 TRITime;
    void (*TaskFunc)(void);
} Task;
用一个结构体管理任务信息
在系统中准备一个tasklist并确定最大长度(因为涉及到内存分配问题这里使用固定任务长度,相当于是预先确定task数组的内存大小)
#define TASK_MAX 10
Task TaskList[TASK_MAX]={0};
初始化tasklist  这个可以在main中调用一次,当然不调用也没什么问题
void TASK_Init(void)
{
    u8 i;
    for (i = 0; i < TASK_MAX; i++)
    {
        TaskList[i].Run = 0;
        TaskList[i].TIMECont = 0;
        TaskList[i].TRITime = 0;
        TaskList[i].TaskFunc = NULL;
    }
}
暴露三个函数用于添加,执行,运行状态管理
void task_add(u8 index, void (*taskFunc)(void), u16 triTime)
{
    if (index < TASK_MAX)
    {
        TaskList[index].Run = 1;
        TaskList[index].TaskFunc = taskFunc;
        TaskList[index].TRITime = triTime;
    }
}
void task_run(void)
{
    u8 i;
    for (i = 0; i < TASK_MAX; i++)
    {
    //    if (TaskList[i].TRITime!=0)
    //    {
    //     printf("Run:task[%d]: tr:%d tm:%d RUN:%d \r\n",i,TaskList[i].TRITime,TaskList[i].TIMECont,TaskList[i].Run);
    //    }
       

        if (TaskList[i].Run==1)
        {
             printf("Run:task[%d]: tr:%d tm:%d RUN:%d \r\n",i,TaskList[i].TRITime,TaskList[i].TIMECont,TaskList[i].Run);
            if (TaskList[i].TaskFunc != NULL)
            {
                TaskList[i].TaskFunc();
                 TaskList[i].Run=0;
            }
        }
    }
}
void task_timer(void)
{
    u8 i;
    for (i = 0; i < TASK_MAX; i++)
    {
   
        if (TaskList[i].Run == 0 && TaskList[i].TRITime != 0)
        {
            TaskList[i].TIMECont++;
            if (TaskList[i].TIMECont >= TaskList[i].TRITime)
            {
                TaskList[i].TIMECont=0;
                TaskList[i].Run = 1;
            }
                 
        }
    }
}


然后将task_run在main中的while里面循环调用即可,
状态控制程序库丢到while运行 或者放到定时器中断里面精确控制
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:205
  • 最近打卡:2025-08-25 11:17:04
已绑定手机

1

主题

61

回帖

715

积分

高级会员

积分
715
发表于 2025-6-21 16:56:20 | 显示全部楼层
终于等到更新了
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:121
  • 最近打卡:2025-08-25 00:05:39
已绑定手机

13

主题

67

回帖

514

积分

高级会员

积分
514
发表于 2025-6-21 18:43:57 | 显示全部楼层
终于更新了。看到第23集,这个PCA感觉和定时器功能一样啊,而且还是不带自动重装载功能的定时器。那用PCA有啥好处呢。
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:188
  • 最近打卡:2025-08-25 08:54:10

2

主题

71

回帖

1189

积分

金牌会员

积分
1189
发表于 2025-6-21 19:04:00 | 显示全部楼层
回复

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:89
  • 最近打卡:2025-08-24 07:54:49
已绑定手机

2

主题

57

回帖

222

积分

中级会员

积分
222
发表于 2025-6-22 08:54:09 | 显示全部楼层
打卡学习
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:296
  • 最近打卡:2025-08-25 09:44:38

7

主题

290

回帖

855

积分

高级会员

积分
855
发表于 2025-6-22 11:19:35 | 显示全部楼层
今天继续:第九集 数码管
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-8-25 17:16 , Processed in 0.125950 second(s), 112 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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