搜索
bottom↓
回复: 15

小小调度器-C语言通用

[复制链接]

出0入0汤圆

发表于 2014-8-26 08:32:13 来自手机 | 显示全部楼层 |阅读模式
本帖最后由 shejian001 于 2014-8-26 09:25 编辑

原作者说无法登陆阿莫了,所以也没发在论坛更新,我看到了就复制过来吧,我想要飞币换开发板,现在还差好多,活动马上就要结束了,恐怕就要错过积灰了。
说明下,别的论坛单片机板块帖子复制,里面有乱马,我手机复制的,再有怕乱删字符对程序有损伤,所以就原文复制过来了,这个对高手来说不算什么难事。
吐槽下,现在的智能手机浏览器没有剪贴板实在不方便,所以我使用的还是老wm系统的手机。
小小调度器-C语言通用

看到时候没有乱码,复制就有,现在截图上来不怕了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2014-8-26 08:46:12 | 显示全部楼层
看起来真乱,不敢往下看

出0入0汤圆

发表于 2014-8-26 08:50:58 | 显示全部楼层
根本不能看

出0入0汤圆

发表于 2014-8-26 08:55:12 | 显示全部楼层
有乱码,

出0入0汤圆

发表于 2014-8-26 08:59:59 | 显示全部楼层
乱码是因为在原帖复制的时候,空白地方的隐藏的乱码被复制过来了,删去乱码即可

出0入0汤圆

发表于 2014-8-26 09:02:05 | 显示全部楼层
再截个屏也好让看到的有个对照啊。

出0入0汤圆

发表于 2014-8-26 09:10:38 | 显示全部楼层
用电脑多好。

出0入0汤圆

发表于 2014-8-26 09:11:41 | 显示全部楼层
求原网址   楼主发错位置了吧。。。这里没有飞币的。

出0入0汤圆

发表于 2014-8-26 10:04:27 | 显示全部楼层
不忍直视啊。。

出0入93汤圆

发表于 2014-8-26 10:12:06 | 显示全部楼层
源头是这个吧?

出0入0汤圆

发表于 2014-8-26 12:14:20 | 显示全部楼层
说心里话,的确是有点乱。

出0入147汤圆

发表于 2014-8-26 12:38:39 | 显示全部楼层
楼主想赚积分也得用点心啊,这么乱还不如不发了。下面是整理好的,可以直接复制。
  1. #include <stc89c51.h>
  2. /****小小调度器开始**********************************************/
  3. #define MAXTASKS 3
  4. volatile unsigned char timers[MAXTASKS];
  5. #define _SS static unsigned char _lc=0; switch(_lc){default:
  6. #define _EE ;}; _lc=0; return 255;
  7. #define WaitX(tickets)  do {_lc=(__LINE__%255)+1; return tickets ;} while(0); case (__LINE__%255)+1:
  8. #define RunTask(TaskName,TaskID) do { if (timers[TaskID]==0) timers[TaskID]=TaskName(); }  while(0);
  9. #define RunTaskA(TaskName,TaskID) { if (timers[TaskID]==0) {timers[TaskID]=TaskName(); continue;} }   //前面的任务优先保证执行

  10. #define CallSub(SubTaskName) do {unsigned char currdt; _lc=(__LINE__%255)+1; return 0; case (__LINE__%255)+1:  currdt=SubTaskName(); if(currdt!=255) return currdt;} while(0);
  11. #define InitTasks() {unsigned char i; for(i=MAXTASKS;i>0 ;i--) timers[i-1]=0; }
  12. #define UpdateTimers() {unsigned char i; for(i=MAXTASKS;i>0 ;i--){if((timers[i-1]!=0)&&(timers[i-1]!=255)) timers[i-1]--;}}

  13. #define SEM unsigned int
  14. //初始化信号量
  15. #define InitSem(sem) sem=0;
  16. //等待信号量
  17. #define WaitSem(sem) do{ sem=1; WaitX(0); if (sem>0) return 1;} while(0);
  18. //等待信号量或定时器溢出, 定时器tickets 最大为0xFFFE
  19. #define WaitSemX(sem,tickets)  do { sem=tickets+1; WaitX(0); if(sem>1){ sem--;  return 1;} } while(0);
  20. //发送信号量
  21. #define SendSem(sem)  do {sem=0;} while(0);
  22. /*****小小调度器结束*******************************************************/

  23. sbit LED1 = P2^1;
  24. sbit LED2 = P2^2;

  25. sbit LED0 = P2^5;

  26. unsigned char task0(){
  27. _SS
  28.   while(1){
  29.    WaitX(50);
  30.    LED0=!LED0;
  31.   }
  32. _EE
  33. }

  34. unsigned char  task1(){
  35. _SS6
  36.   while(1){
  37.    WaitX(100);
  38.    LED1=!LED1;   
  39.   }
  40. _EE
  41. }

  42. unsigned char  task2(){
  43. _SS
  44.   while(1){
  45.    WaitX(100);
  46.    LED2=!LED2;
  47.   }
  48. _EE
  49. }

  50. void InitT0()
  51. {
  52.         TMOD = 0x21;
  53.         IE |= 0x82;
  54.         TL0=0Xff;
  55.         TH0=0XDB;
  56.         TR0 = 1;
  57. }

  58. void INTT0(void) interrupt 1 using 1
  59. {
  60.     TL0=0Xff;    //10ms 重装
  61.     TH0=0XDB;
  62.     UpdateTimers();
  63.     RunTask(task0,0);//任务0具有精确按时获得执行的权限,要求:task0每次执行消耗时间<0.5个 ticket
  64. }

  65. void main()
  66. {
  67.         InitT0();
  68.         InitTasks(); //初始化任务,实际上是给timers清零
  69.         while(1){
  70. //      RunTask(task0,0);
  71.         RunTaskA(task1,1);//任务1具有比任务2高的运行权限                 
  72.         RunTaskA(task2,2);//任务2具有低的运行权限
  73.       }
  74. }
复制代码

出0入0汤圆

发表于 2014-8-26 17:37:08 | 显示全部楼层
DDD UP

出0入0汤圆

发表于 2014-8-26 21:20:14 | 显示全部楼层
本帖最后由 xintao 于 2014-8-26 21:24 编辑


感觉阿莫应该恢复原作者的ID,感觉原作者是很乐于分享的……

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2014-8-27 02:07:36 | 显示全部楼层
我就说觉得很眼熟

出0入0汤圆

发表于 2014-9-12 12:32:14 | 显示全部楼层
关键看思路
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-30 18:15

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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