找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6679|回复: 12
收起左侧

51单片机简单多任务调度实现代码

  [复制链接]
ID:61002 发表于 2017-7-18 10:52 | 显示全部楼层 |阅读模式
  1. //注意
  2. //任务优先级必须小于任务个数,不然会死机
  3. //任务优先级并非真实的,高有限级的任务不会打断低优先级的任务
  4. //只是当2个任务执行的时间到了,高优先级的任务会优先执行
  5. //任务的优先级同时也是任务的句柄,任务创建和使能的时候会用到
  6. //任务无法删除,可以通过失能,失任务不执行
  7. #define Rtos_Num 5//任务个数  

  8. //简单任务调度
  9. typedef struct{
  10.         void (*fTask)(void);//任务指针
  11.         uint8_t  runFlag;//运行标志位  1使能  0失能
  12.         uint16_t  uLenTick;//任务调度周期
  13.         uint32_t  uNextTick;//下次执行时间
  14. }sTask;

  15. //        extern uint32_t Rtos_SysTim; //系统时间   一般是1ms定时器
  16. //创建任务
  17. void Rtos_Creat(void *Task_Name,uint8_t Priority,uint8_t enable,uint32_t starttim,uint16_t tim);
  18. //任务使能
  19. void Rtos_En(uint8_t Priority,uint8_t enable);
  20. //开始执行任务
  21. void Rtos_Run(void);
复制代码


简易任务调度.rar

39.22 KB, 下载次数: 115, 下载积分: 黑币 -5

任务调度

评分

参与人数 1黑币 +100 收起 理由
admin + 100 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:61002 发表于 2017-7-18 10:55 | 显示全部楼层
贴出了所有的代码,但是只显示了一部分
回复

使用道具 举报

ID:61002 发表于 2017-7-18 10:55 | 显示全部楼层
  1. /创建任务
  2. //任务名称 任务优先级  使能    开始时间    周期  
  3. void Rtos_Creat(void *Task_Name,uint8_t Priority,uint8_t enable,uint32_t starttim,uint16_t tim)
  4. {
  5.         if(Priority>=Rtos_Num)
  6.         {
  7.                 while(1)
  8.                 {
  9.                         //可做其他处理
  10.                         printf("任务出错");               
  11.                 }
  12.         }
  13.         mTaskTab[Priority].fTask=(void(*)(void))Task_Name;//函数名
  14.         mTaskTab[Priority].runFlag =enable;//使能
  15.         mTaskTab[Priority].uNextTick=starttim;//任务开始执行的时间
  16.         mTaskTab[Priority].uLenTick=tim;//任务开始执行的时间
  17. }
  18. //任务使能  失能
  19. //任务优先级   使能
  20. void Rtos_En(uint8_t Priority,uint8_t enable)
  21. {
  22.         if(Priority>=Rtos_Num)
  23.         {
  24.                 while(1)
  25.                 {
  26.                         //可做其他处理
  27.                         printf("任务出错");               
  28.                 }
  29.         }
  30.         mTaskTab[Priority].runFlag =enable;//使能
  31. }
  32. //开始调度
  33. void Rtos_Run(void)
  34. {
  35.         while(1)
  36.         {
  37.                 for (uint8_t  i = 0; i < (sizeof (mTaskTab)/sizeof(sTask)); i++)
  38.                 {
  39.                         if ((mTaskTab[i].uNextTick <= Rtos_SysTim)&&(mTaskTab[i].runFlag==1))
  40.                         {
  41.                                         mTaskTab[i].uNextTick += mTaskTab[i].uLenTick;
  42.                                         mTaskTab[i].fTask();        
  43.                         }
  44.                 }
  45.         }
  46. }
复制代码
回复

使用道具 举报

ID:221865 发表于 2017-7-23 21:26 | 显示全部楼层
黑币不够啊
回复

使用道具 举报

ID:66287 发表于 2018-2-13 10:27 | 显示全部楼层
很不错,谢谢楼主分享
回复

使用道具 举报

ID:20672 发表于 2018-7-22 09:09 | 显示全部楼层
谢谢分享
回复

使用道具 举报

ID:20672 发表于 2018-7-24 20:46 | 显示全部楼层
谢谢分享!!
回复

使用道具 举报

ID:93883 发表于 2019-1-15 17:43 | 显示全部楼层
谢谢分享,刚刚入门51
回复

使用道具 举报

ID:468821 发表于 2019-1-15 21:28 | 显示全部楼层
谢谢分享
回复

使用道具 举报

ID:486325 发表于 2019-3-7 15:55 | 显示全部楼层
代码看不全啊,有没有完整的代码,谢谢
回复

使用道具 举报

ID:341228 发表于 2022-2-25 10:19 | 显示全部楼层
别下载了  里面没东西  就帖子里面贴出来的那一点点代码
回复

使用道具 举报

ID:920224 发表于 2022-3-28 02:41 | 显示全部楼层
谢谢分享,看了一下,感觉还有一点地方可以优化一下
回复

使用道具 举报

ID:46943 发表于 2022-4-22 17:03 | 显示全部楼层
我是来学习的
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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