資源簡介
原創實時操作系統,能夠在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程序
評論
共有 條評論