找回密码
 立即注册
查看: 805|回复: 14

44行多任务代码重写

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:339
  • 最近打卡:2025-05-06 20:07:45

23

主题

296

回帖

1168

积分

金牌会员

积分
1168
发表于 2024-6-2 17:13:31 | 显示全部楼层 |阅读模式
本帖最后由 lezjin 于 2024-8-21 20:31 编辑

更新代码例程,增加串口2发送功能,串口1仿真用,串口2 定义printf函数,打印调试信息,非常好用



参考官方例程和论坛44行写了一个多任务模板,
观察好像就中断函数不太一样,
44行代码中,函数时间只做自减,函数状态在调用时候改变。


官方多任务例程在中断函数中自减函数设定的时间,时间到改变函数状态位。

点两个灯可以正常运行



  1. typedef struct
  2. {
  3.     uint8_t taskstate;             //任务状态
  4.     uint16_t tasktime;             //任务时间片
  5.     uint16_t tasktimeR;        //任务时间重装值
  6.   void (*pTaskCb)(void);      //任务函数
  7. }Task_t;
  8. static Task_t g_task[] =
  9. {
  10.   //状态  计数  重装   函数
  11.     {0,   500,    500,      LedCtrlone},
  12.     {0,   5000,     5000,   LedCtrltwo},
  13.       /* Add new task here */
  14. };
  15. #define TASK_MAX (sizeof(g_task) / sizeof(g_task[0]))
  16. static void TaskHandle(void)
  17. {
  18.     uint8_t i;
  19.     for(i = 0; i < TASK_MAX; i++)
  20.     {
  21.         switch (g_task[i].taskstate)
  22.         {
  23.             case 0:
  24.                 g_task[i].pTaskCb();
  25.                 g_task[i].tasktime = (g_task[i].tasktimeR);
  26.                 g_task[i].taskstate++;
  27.                 break;
  28.             case 2:
  29.                     g_task[i].taskstate = 0;
  30.                 break;
  31.             default:
  32.                 if(g_task[i].tasktime == 0)
  33.                 {
  34.                     g_task[i].taskstate++;
  35.                 }
  36.                 break;
  37.         }
  38.     }
  39. }
  40. static void  TasktimeSub(void)   
  41. {
  42.     uint8_t i;
  43.     for (i = 0; i < TASK_MAX; i++ )
  44.     {
  45.         if (g_task[i].tasktime > 0)
  46.         {
  47.             g_task[i].tasktime--;
  48.         }
  49.     }
  50. }
  51. void main(void)
  52. {
  53.     while(1)
  54.     {
  55.         TaskHandle();
  56.     }
  57. }
  58. void Time0_ISR() interrupt     TMR0_VECTOR   //定时器0中断函数1微秒
  59. {
  60.     TasktimeSub();   
  61. }
复制代码



exmtask.rar

80.83 KB, 下载次数: 87

回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:339
  • 最近打卡:2025-05-06 20:07:45

23

主题

296

回帖

1168

积分

金牌会员

积分
1168
发表于 2024-6-2 17:20:03 | 显示全部楼层
本帖最后由 lezjin 于 2024-6-2 17:22 编辑

两个LED闪烁运行

a2f2ba2b3d4d0025d46fccbaefcd9df3.mp4

4.69 MB, 下载次数: 73

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:428
  • 最近打卡:2025-05-07 00:13:45
已绑定手机

19

主题

3194

回帖

4948

积分

论坛元老

积分
4948
发表于 2024-6-2 23:49:50 来自手机 | 显示全部楼层
rtos的原型?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:239
  • 最近打卡:2025-05-07 07:20:07

61

主题

818

回帖

1514

积分

金牌会员

积分
1514
发表于 2024-6-3 05:54:23 | 显示全部楼层
这是啥???还没学到
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:345
  • 最近打卡:2025-05-07 08:34:11

0

主题

17

回帖

1462

积分

金牌会员

积分
1462
发表于 2024-6-3 06:47:23 | 显示全部楼层
能否提供完整源码和示例包
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:339
  • 最近打卡:2025-05-06 20:07:45

23

主题

296

回帖

1168

积分

金牌会员

积分
1168
发表于 2024-6-3 08:44:46 | 显示全部楼层
cy*** 发表于 2024-6-3 06:47
能否提供完整源码和示例包

晚上我把这个点灯的打包一下
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:339
  • 最近打卡:2025-05-06 20:07:45

23

主题

296

回帖

1168

积分

金牌会员

积分
1168
发表于 2024-6-4 21:42:26 | 显示全部楼层
cy*** 发表于 2024-6-3 06:47
能否提供完整源码和示例包

已上传
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:345
  • 最近打卡:2025-05-07 08:34:11

0

主题

17

回帖

1462

积分

金牌会员

积分
1462
发表于 2024-6-7 10:36:12 | 显示全部楼层
上传的 project.uvproj 工程文件打不开
截图202406071035007487.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:340
  • 最近打卡:2025-05-06 19:09:22
已绑定手机

14

主题

600

回帖

2215

积分

荣誉版主

积分
2215
发表于 2024-6-8 11:21:53 | 显示全部楼层
好多时候,我认为时间调度是比操作系统更加有优势的.
因为涉及不到各种保护,

唯一需要注意就是最长任务执行时间不要超过调度周期就好了.
需要延时的,搞个状态机就好.
回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:339
  • 最近打卡:2025-05-06 20:07:45

23

主题

296

回帖

1168

积分

金牌会员

积分
1168
发表于 2024-6-9 18:03:03 | 显示全部楼层
cy*** 发表于 2024-6-7 10:36
上传的 project.uvproj 工程文件打不开

大概率版本问题,我的是960a
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-7 12:04 , Processed in 0.130749 second(s), 117 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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