资源简介
原创实时操作系统,能够在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个文件信息
- 上一篇:软件系统需求规格说明书
- 下一篇:LCD12864(KS0108) C51程序
评论
共有 条评论