• 大小: 74KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-12
  • 语言: 其他
  • 标签:

资源简介

原创实时操作系统,能够在51单片机上运行,同时支持时间片轮转调度和优先级调度,8个优先级,每个优先级最多3个任务,理论上最多支持24个任务(包括一个空闲任务),但实际由于时间片轮转法消耗RAM太大,所以时间不能同时有太多任务,经测试RAM为256个字节的51单片机,8个任务没有问题,系统服务有,系统延时、计数信号量、邮箱、标志事件,编译后ROM占用不超过3K,绝对超值

资源截图

代码片段和文件信息

#include“Config.h“
OSMCB JSCB;
UINT8 CONST OSMapTbl[]={0x010x020x040x080x100x200x400x800x00};
UINT8 OSTimeTicks=TIMES;
void OSIntSendSignal(UINT8 TaskID)
{
    JSCB.OSTaskRunning[TaskID%3]|=OSMapTbl[TaskID/3];
JSCB.OSRdyGrp|=OSMapTbl[TaskID/3];
}

 void OSClearSignal(UINT8 TaskID)
 {
    JSCB.OSTaskRunning[TaskID%3]&=~OSMapTbl[TaskID/3];
JSCB.OSRdyGrp&=~OSMapTbl[TaskID/3];
 }

  void OSSetFastFlag(UINT8 TaskID)
 {
    JSCB.OSFastSWFlag[TaskID%3]|=OSMapTbl[TaskID/3];
 }
 void OSClearFastFlag(UINT8 TaskID)
 {
    JSCB.OSFastSWFlag[TaskID%3]&=~OSMapTbl[TaskID/3];
 }
 BOOL OSQureyFastFlag(UINT8 TaskID)
 {
     
   if(JSCB.OSFastSWFlag[TaskID%3] & OSMapTbl[TaskID/3])
 {
   return TRUE;
 }
 return FALSE;
 }
   void TimerTickInit()
 {
     TMOD|=0X01;
     TH0=(65536-50000)/256;
     TL0=(65536-50000)%256;
     TR0=1;
 ET0=1;
 }
 void OSInit()
{
 memset(&JSCBsizeof(JSCB)0);
 OSCreateTask(OSIDLEID/3OSIDLEID%3OSIdle);
 TimerTickInit();
 JSCB=JSCB;
 }
 void OSCreateTask(UINT8 PriosUINT8 RanksUINT16 FunAddress)
{
   if(OSIDLEID==TOID(PriosRanks))
   {
  *(UINT8 *)(END_STACK-21)=(UINT16)OSIdle%256;
  *(UINT8 *)(END_STACK-21+1)=(UINT16)OSIdle/256;
  OSIntSendSignal(OSIDLEID);
  JSCB.OSStackTop[OSIDLEID]=(UINT8)(END_STACK-21+1);
  JSCB.MaxFreeSP=(END_STACK-21+1-2);
   }
   else
   {
       if(0==TOID(PriosRanks))
   {
      
  *(UINT8 idata*)(START_STACK)=(UINT16)FunAddress%256;
  *(UINT8 idata*)(START_STACK+1)=(UINT16)FunAddress/256;
  OSIntSendSignal(0);
  JSCB.OSStackTop[0]=(UINT8)(START_STACK+1);
   }
   else
   {
      JSCB.OSStackTop[TOID(PriosRanks)]=JSCB.MaxFreeSP;
  OSIntSendSignal(TOID(PriosRanks));
  *(UINT8 idata*)(JSCB.MaxFreeSP--)=(UINT16)FunAddress/256;
  *(UINT8 idata*)(JSCB.MaxFreeSP--)=(UINT16)FunAddress%256;
   }
   }

}
void OSStart()
{
  SP=JSCB.OSStackTop[0];
  OSTimeTicks=TIMES;
  EA=1;
}
void HighRedyTask()
{
    UINT8 Value=0;
UINT8 Rank=0;
UINT8 Prio=0;
for(Rank=0;Rank<3;Rank++)
for(Prio=0;Prio<=MAX_PRIOS;Prio++)
{
   if(JSCB.OSTaskRunning[Rank] & OSMapTbl[Prio])
   {
     JSCB.OSHighRedyID=TOID(PrioRank);
 return ;
   }
}
    JSCB.OSHighRedyID=OSIDLEID;
return ;
}
void OSSched()
{
   EA=0;
   HighRedyTask();
   OSClearFastFlag(JSCB.OSCurTaskID);
   OSTimeTicks=TIMES;
   if((JSCB.OSHighRedyID/3)==(JSCB.OSCurTaskID/3))
   {
JSCB.OSHighRedyID=SamePrioNestID(JSCB.OSCurTaskID);
   }
   OS_STACK_Ctx();
   SP=SP;
}
 UINT8 SamePrioNestID(UINT8 CurID)
{
  UINT8 ID=CurID+1;
   while(1)
  {
  if(JSCB.OSTaskRunning[ID%3] & OSMapTbl[ID/3])
  {
  return ID;
  }
  else
  {
   ++ID;
  if(ID/3>CurID/3)
  {
 ID=ID-3;
  }
  }
  }
}
void OS_STACK_Ctx()
{
     UINT8 idata* cp1idata* cp2;
 UINT8 idata temp;
 UINT8 idata  i;
 SP=SP-2;
     JSCB.OSStackTop[JSCB.OSCurTaskID]=SP;

 temp=JSCB.OSStackTop[JSCB.OSHigh

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2013-01-18 11:39  实时操作系统源代码JS-RTOS0.1版\
     目录           0  2013-01-18 11:39  实时操作系统源代码JS-RTOS0.1版\CORE\
     文件        5423  2013-01-17 18:26  实时操作系统源代码JS-RTOS0.1版\CORE\Core.c
     文件        1470  2013-01-17 16:47  实时操作系统源代码JS-RTOS0.1版\CORE\Core.h
     目录           0  2013-01-18 11:39  实时操作系统源代码JS-RTOS0.1版\CPU\
     文件         615  2013-01-18 23:19  实时操作系统源代码JS-RTOS0.1版\CPU\CPU.asm
     文件         368  2013-01-18 11:38  实时操作系统源代码JS-RTOS0.1版\CPU\CPU.h
     目录           0  2013-01-18 11:39  实时操作系统源代码JS-RTOS0.1版\SysServs\
     文件        1606  2013-01-18 11:04  实时操作系统源代码JS-RTOS0.1版\SysServs\JS_Flag.c
     文件         181  2013-01-18 11:11  实时操作系统源代码JS-RTOS0.1版\SysServs\JS_Flag.h
     文件        1727  2013-01-18 11:36  实时操作系统源代码JS-RTOS0.1版\SysServs\JS_MBox.c
     文件         216  2013-01-18 11:37  实时操作系统源代码JS-RTOS0.1版\SysServs\JS_MBox.h
     文件        1694  2013-01-18 11:10  实时操作系统源代码JS-RTOS0.1版\SysServs\JS_Sems.c
     文件         194  2013-01-17 18:13  实时操作系统源代码JS-RTOS0.1版\SysServs\JS_Sems.h
     文件         293  2013-01-18 10:24  实时操作系统源代码JS-RTOS0.1版\SysServs\JS_Wait.c
     文件          83  2013-01-17 18:25  实时操作系统源代码JS-RTOS0.1版\SysServs\JS_Wait.h
     目录           0  2013-01-18 11:39  实时操作系统源代码JS-RTOS0.1版\USER\
     文件        3298  2013-01-18 23:19  实时操作系统源代码JS-RTOS0.1版\USER\CPU.lst
     文件         773  2013-01-18 23:19  实时操作系统源代码JS-RTOS0.1版\USER\CPU.obj
     文件         247  2013-01-18 11:24  实时操作系统源代码JS-RTOS0.1版\USER\Config.h
     文件       12709  2013-01-18 23:19  实时操作系统源代码JS-RTOS0.1版\USER\Core.lst
     文件       21490  2013-01-18 23:19  实时操作系统源代码JS-RTOS0.1版\USER\Core.obj
     文件       71899  2013-01-18 23:19  实时操作系统源代码JS-RTOS0.1版\USER\JS-RTOS
     文件       39050  2013-01-18 23:19  实时操作系统源代码JS-RTOS0.1版\USER\JS-RTOS.M51
     文件        3221  2013-01-18 23:19  实时操作系统源代码JS-RTOS0.1版\USER\JS-RTOS.Opt
     文件        2478  2013-01-18 11:38  实时操作系统源代码JS-RTOS0.1版\USER\JS-RTOS.Uv2
     文件        7906  2013-01-18 23:19  实时操作系统源代码JS-RTOS0.1版\USER\JS-RTOS.hex
     文件         157  2013-01-18 23:19  实时操作系统源代码JS-RTOS0.1版\USER\JS-RTOS.lnp
     文件        1748  2013-01-18 23:19  实时操作系统源代码JS-RTOS0.1版\USER\JS-RTOS.plg
     文件        3228  2013-01-18 21:30  实时操作系统源代码JS-RTOS0.1版\USER\JS-RTOS_Opt.Bak
     文件        2378  2013-01-17 18:37  实时操作系统源代码JS-RTOS0.1版\USER\JS-RTOS_Uv2.Bak
............此处省略17个文件信息

评论

共有 条评论