找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3125|回复: 0
打印 上一主题 下一主题
收起左侧

网友写的占用资源极小的调度器

[复制链接]
跳转到指定楼层
楼主
ID:80436 发表于 2015-5-21 22:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/****小小调度器开始**********************************************/
#define MAXTASKS 3
unsigned char currid;
unsigned char timers[MAXTASKS];
#define _SS   static unsigned char lc=0; switch(lc){   case 0:
#define _EE   ;}; lc=0;
#define WaitX(tickets) {lc=__LINE__; timers[currid]=tickets;} return ; case __LINE__:
#define RunTask(TaskName,TaskID) {currid=TaskID; if (timers[TaskID]==0){timers[TaskID]=255; TaskName();}}
#define CallSub(SubTaskName)   WaitX(0); SubTaskName(); if (timers[currid]!=255) return;
/*****小小调度器结束*******************************************************/

sbit LED1 = P2^1;
sbit LED2 = P2^2;

void InitT0()
{
        TMOD = 0x21;
        IE |= 0x82;  // 12t
        TL0=0Xff;
        TH0=0XDB;//22M---b7;
        TR0 = 1;
}

void INTT0(void) interrupt 1 using 1
{
    unsigned char i;
        TL0=0Xff;    //10ms 重装
        TH0=0XDB;//b7;

    for (i=0;i<MAXTASKS;i++){
     if ((timers[i]!=0)&&(timers[i]!=255)) {
           timers[i]--;
         }
    }        
}


void  task1(){
_SS
  while(1){
   WaitX(50);
   LED1=!LED1;   
  }
_EE
}

void  task2(){
_SS
  while(1){
   WaitX(100);
   LED2=!LED2;   
  }
_EE
}


void main()
{
        InitT0();
        while(1){
           RunTask(task1,1);
           RunTask(task2,2);
    }
}




分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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