5501|8

401

帖子

1

TA的资源

一粒金砂(高级)

楼主
 

删繁就简,分享一个占资源极少的单片机小小调度器 [复制链接]

 
本帖最后由 xunke 于 2016-10-7 11:05 编辑

在某坛看到,感觉很牛逼!特在此与其他网友分享:
1)  超级可以移植性,与CPU无关,几乎任何支持C语言编程的CPU都可以用!
2)  小之又小, 原理很简单,一看就懂。
3)  省之又省, 可以说对RAM和ROM省到极致。
4)  取protothread之精华,将定时器与状态机和伪线程语法融合到一个框架,任务函数可以有两种写法。
5)  基于定时器触发,调度效率高,最大化减少无效的代码运行时间。
  1. /****小小调度器开始**********************************************/
  2. #define TimeDef         unsigned short
  3. #define LineDef         unsigned char
  4. #define END             ((TimeDef)-1)
  5. #define LINE            ((__LINE__%(LineDef)-1)+1)  

  6. #define me  (*cp)
  7. #define TaskFun(TaskName)     TimeDef TaskName(C_##TaskName *cp) {switch(me.task.lc){default:
  8. #define Exit            do { me.task.lc=0; return END; }  while(0)
  9. #define Restart           do { me.task.lc=0; return 0; }  while(0)
  10. #define EndFun            } Exit; }

  11. #define WaitX(ticks)      do { me.task.lc=LINE; return (ticks); case LINE:;} while(0)
  12. #define WaitUntil(A)      do { while(!(A)) WaitX(0);} while(0)

  13. #define UpdateTimer(TaskVar)    do { if((TaskVar.task.timer!=0)&&(TaskVar.task.timer!=END)) TaskVar.task.timer--; }  while(0)
  14. #define RunTask(TaskName,TaskVar) do { if(TaskVar.task.timer==0) TaskVar.task.timer=TaskName(&(TaskVar)); }  while(0)

  15. #define CallSub(SubTaskName,SubTaskVar)    do { WaitX(0);SubTaskVar.task.timer=SubTaskName(&(SubTaskVar));      \
  16.                   if(SubTaskVar.task.timer!=END) return SubTaskVar.task.timer;} while(0)
  17.    
  18. /****************************************************************/
  19. #define Class(type)         typedef struct C_##type C_##type; struct C_##type
  20. Class(task)
  21. {
  22.   TimeDef timer;
  23.   LineDef lc;
  24. };
  25. void runtasks();
复制代码
本调度器由smset原创、历经4年完成,具体内容请见附件!
小小调度器整理说明.pdf (419.93 KB, 下载次数: 356)
小小调度器V2.0 简化版.rar (1.86 KB, 下载次数: 280)
此帖出自编程基础论坛

最新回复

很久就知道这个调度器,8位机使用很好,但是不能用siwth case   详情 回复 发表于 2019-12-14 22:52
点赞(1) 关注(5)
 

回复
举报

6423

帖子

17

TA的资源

版主

沙发
 
谢谢楼主分享
此帖出自编程基础论坛
 
个人签名training
 
 

回复

466

帖子

0

TA的资源

版主

板凳
 
感觉很多用小单片机的还没有这种任务意识啊
此帖出自编程基础论坛
 
 
 

回复

732

帖子

2

TA的资源

纯净的硅(中级)

4
 
刚看到这个  不错的
此帖出自编程基础论坛
 
个人签名亚里士缺德
 
 

回复

1976

帖子

1

TA的资源

五彩晶圆(初级)

5
 
标记一下,学习学习
此帖出自编程基础论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

6
 
看了一下,有个疑问:小小调度器能不能加入有参函数?
此帖出自编程基础论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

7
 
3q楼主
此帖出自编程基础论坛
 
 
 

回复

19

帖子

0

TA的资源

一粒金砂(初级)

8
 

学习一下!!!

此帖出自编程基础论坛
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

9
 

很久就知道这个调度器,8位机使用很好,但是不能用siwth case

此帖出自编程基础论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表