操作系统内核设计的四个例子.docx
- 文档编号:14627226
- 上传时间:2023-06-25
- 格式:DOCX
- 页数:72
- 大小:29.82KB
操作系统内核设计的四个例子.docx
《操作系统内核设计的四个例子.docx》由会员分享,可在线阅读,更多相关《操作系统内核设计的四个例子.docx(72页珍藏版)》请在冰点文库上搜索。
操作系统内核设计的四个例子
/*
*********************************************************************************************************
*uC/OS-II
*TheReal-TimeKernel
*
*(c)Copyright1992-2002,JeanJ.Labrosse,Weston,FL
*AllRightsReserved
*
*EXAMPLE#1
*********************************************************************************************************
*/
#include"includes.h"
/*
*********************************************************************************************************
*CONSTANTS
*********************************************************************************************************
*/
#defineTASK_STK_SIZE512/*Sizeofeachtask'sstacks(#ofWORDs)*/
#defineN_TASKS10/*Numberofidenticaltasks*/
/*
*********************************************************************************************************
*VARIABLES
*********************************************************************************************************
*/
OS_STKTaskStk[N_TASKS][TASK_STK_SIZE];/*Tasksstacks*/
OS_STKTaskStartStk[TASK_STK_SIZE];
charTaskData[N_TASKS];/*Parameterstopasstoeachtask*/
OS_EVENT*RandomSem;
/*
*********************************************************************************************************
*FUNCTIONPROTOTYPES
*********************************************************************************************************
*/
voidTask(void*data);/*Functionprototypesoftasks*/
voidTaskStart(void*data);/*FunctionprototypesofStartuptask*/
staticvoidTaskStartCreateTasks(void);
staticvoidTaskStartDispInit(void);
staticvoidTaskStartDisp(void);
/*$PAGE*/_
/*
*********************************************************************************************************
*MAIN
*********************************************************************************************************
*/
voidmain(void)
{
PC_DispClrScr(DISP_FGND_WHITE+DISP_BGND_BLACK);/*Clearthescreen*/
OSInit();/*InitializeuC/OS-II*/
PC_DOSSaveReturn();/*SaveenvironmenttoreturntoDOS*/
PC_VectSet(uCOS,OSCtxSw);/*InstalluC/OS-II'scontextswitchvector*/
RandomSem=OSSemCreate
(1);/*Randomnumbersemaphore*/
OSTaskCreate(TaskStart,(void*)0,&TaskStartStk[TASK_STK_SIZE-1],0);
OSStart();/*Startmultitasking*/
}
/*
*********************************************************************************************************
*STARTUPTASK
*********************************************************************************************************
*/
voidTaskStart(void*pdata)
{
#ifOS_CRITICAL_METHOD==3/*AllocatestorageforCPUstatusregister*/
OS_CPU_SRcpu_sr;
#endif
chars[100];
INT16Skey;
pdata=pdata;/*Preventcompilerwarning*/
TaskStartDispInit();/*Initializethedisplay*/
OS_ENTER_CRITICAL();
PC_VectSet(0x08,OSTickISR);/*InstalluC/OS-II'sclocktickISR*/
PC_SetTickRate(OS_TICKS_PER_SEC);/*Reprogramtickrate*/
OS_EXIT_CRITICAL();
OSStatInit();/*InitializeuC/OS-II'sstatistics*/
TaskStartCreateTasks();/*Createalltheapplicationtasks*/
for(;;){
TaskStartDisp();/*Updatethedisplay*/
if(PC_GetKey(&key)==TRUE){/*Seeifkeyhasbeenpressed*/
if(key==0x1B){/*Yes,seeifit'stheESCAPEkey*/
PC_DOSReturn();/*ReturntoDOS*/
}
}
OSCtxSwCtr=0;/*Clearcontextswitchcounter*/
OSTimeDlyHMSM(0,0,1,0);/*Waitonesecond*/
}
}
/*$PAGE*/_
/*
*********************************************************************************************************
*INITIALIZETHEDISPLAY
*********************************************************************************************************
*/
staticvoidTaskStartDispInit(void)
{
/*1111111111222222222233333333334444444444555555555566666666667777777777*/
/*01234567890123456789012345678901234567890123456789012345678901234567890123456789*/
PC_DispStr(0,0,"uC/OS-II,TheReal-TimeKernel",DISP_FGND_WHITE+DISP_BGND_RED+DISP_BLINK);
PC_DispStr(0,1,"JeanJ.Labrosse",DISP_FGND_BLACK+DISP_BGND_LIGHT_GRAY);
PC_DispStr(0,2,"",DISP_FGND_BLACK+DISP_BGND_LIGHT_GRAY);
PC_DispStr(0,3,"MYEXAMPLE#1",DISP_FGND_BLACK+DISP_BGND_LIGHT_GRAY);
PC_DispStr(0,4,"",DISP_FGND_BLACK+DISP_BGND_LIGHT_GRAY);
PC_DispStr(0,5,"",DISP_FGND_BLACK+DISP_BGND_LIGHT_GRAY);
PC_DispStr(0,6,"",DISP_FGND_BLACK+DISP_BGND_LIGHT_GRAY);
PC_DispStr(0,7,"",DISP_FGND_BLACK+DISP_BGND_LIGHT_GRAY);
PC_DispStr(0,8,"",DISP_FGND_BLACK+DISP_BGND_LIGHT_GRAY);
PC_DispStr(0,9,"",DISP_FGND_BLACK+DISP_BGND_LIGHT_GRAY);
PC_DispStr(0,10,"",DISP_FGND_BLACK+DISP_BGND_LIGHT_GRAY);
PC_DispStr(0,11,"",DISP_FGND_BLACK+DISP_BGND_LIGHT_GRAY);
PC_DispStr(0,12,"",DISP_FGND_BLACK+DISP_BGND_LIGHT_GRAY);
PC_DispStr(0,13,"",DISP_FGND_BLACK+DISP_BGND_LIGHT_GRAY);
PC_DispStr(0,14,"",DISP_FGND_BLACK+DISP_BGND_LIGHT_GRAY);
PC_DispStr(0,15,"",DISP_FGND_BLACK+DISP_BGND_LIGHT_GRAY);
PC_DispStr(0,16,"",DISP_FGND_BLACK+DISP_BGND_LIGHT_GRAY);
PC_DispStr(0,17,"",DISP_FGND_BLACK+DISP_BGND_LIGHT_GRAY);
PC_DispStr(0,18,"",DISP_FGND_BLACK+DISP_BGND_LIGHT_GRAY);
PC_DispStr(0,19,"",DISP_FGND_BLACK+DISP_BGND_LIGHT_GRAY);
PC_DispStr(0,20,"",DISP_FGND_BLACK+DISP_BGND_LIGHT_GRAY);
PC_DispStr(0,21,"",DISP_FGND_BLACK+DISP_BGND_LIGHT_GRAY);
PC_DispStr(0,22,"#Tasks:
CPUUsage:
%",DISP_FGND_BLACK+DISP_BGND_LIGHT_GRAY);
PC_DispStr(0,23,"#Taskswitch/sec:
",DISP_FGND_BLACK+DISP_BGND_LIGHT_GRAY);
PC_DispStr(0,24,"<-PRESS'ESC'TOQUIT->",DISP_FGND_BLACK+DISP_BGND_LIGHT_GRAY+DISP_BLINK);
/*1111111111222222222233333333334444444444555555555566666666667777777777*/
/*01234567890123456789012345678901234567890123456789012345678901234567890123456789*/
}
/*$PAGE*/_
/*
*********************************************************************************************************
*UPDATETHEDISPLAY
*********************************************************************************************************
*/
staticvoidTaskStartDisp(void)
{
chars[80];
sprintf(s,"%5d",OSTaskCtr);/*Display#tasksrunning*/
PC_DispStr(18,22,s,DISP_FGND_YELLOW+DISP_BGND_BLUE);
#ifOS_TASK_STAT_EN>0
sprintf(s,"%3d",OSCPUUsage);/*DisplayCPUusagein%*/
PC_DispStr(36,22,s,DISP_FGND_YELLOW+DISP_BGND_BLUE);
#endif
sprintf(s,"%5d",OSCtxSwCtr);/*Display#contextswitchespersecond*/
PC_DispStr(18,23,s,DISP_FGND_YELLOW+DISP_BGND_BLUE);
sprintf(s,"V%1d.%02d",OSVersion()/100,OSVersion()%100);/*DisplayuC/OS-II'sversionnumber*/
PC_DispStr(75,24,s,DISP_FGND_YELLOW+DISP_BGND_BLUE);
switch(_8087){/*DisplaywhetherFPUpresent*/
case0:
PC_DispStr(71,22,"NOFPU",DISP_FGND_YELLOW+DISP_BGND_BLUE);
break;
case1:
PC_DispStr(71,22,"8087FPU",DISP_FGND_YELLOW+DISP_BGND_BLUE);
break;
case2:
PC_DispStr(71,22,"80287FPU",DISP_FGND_YELLOW+DISP_BGND_BLUE);
break;
case3:
PC_DispStr(71,22,"80387FPU",DISP_FGND_YELLOW+DISP_BGND_BLUE);
break;
}
}
/*$PAGE*/_
/*
*********************************************************************************************************
*CREATETASKS
*********************************************************************************************************
*/
staticvoidTaskStartCreateTasks(void)
{
INT8Ui;
for(i=0;i TaskData[i]='0'+i;/*Eachtaskwilldisplayitsownletter*/ OSTaskCreate(Task,(void*)&TaskData[i],&TaskStk[i][TASK_STK_SIZE-1],i+1); } } /* ********************************************************************************************************* *TASKS ********************************************************************************************************* */ voidTask(void*pdata) { INT8Ux; INT8Uy; INT8Uerr; for(;;){ OSSemPend(RandomSem,0,&err);/*Acquiresemaphoretoperformrandomnumbers*/ x=random(40);/*FindXpositionwheretasknumberwillappear*/ y=random(8);/*FindYpositionwheretasknumberwillappear*/ OSSemPost(RandomSem);/*Releasesemaphore*/ /*Displaythetasknumberonthescreen*/ PC_DispChar(x,y+5,*(char*)pdata,DISP_FGND_BLACK+DISP_BGND_LIGHT_GRAY); OSTimeDly(10);/*Delay1clocktick*/ } } 、 第二例子 /* ********************************************************************************************************* *uC/OS-II *TheReal-TimeKernel * *(c)Copyright1992-2002,JeanJ.Labrosse,Weston,FL *AllRightsReserved * *EXAMPLE#2 ********************************************************************************************************* */ #include"includes.h" /* ********************************************************************************************************* *CONSTANTS ********************************************************************************************************* */ #defineTASK_STK_SIZE512/*Sizeofeachtask'sstacks(#ofWORDs)*/ #defineTASK_START_ID0/*ApplicationtasksIDs*/ #defineTASK_CLK_ID1 #defineTASK_1_ID2 #defineTASK_2_ID3 #defineTASK_3_ID4 #defineTASK_4_ID5 #defineTASK_5_ID6 #defineTASK_START_PRIO10/*Applicationtaskspriorities*/ #defineTASK_CLK_PRIO11 #defineTASK_1_PRIO12 #defineTASK_2_PRIO13 #defineTASK_3_PRIO14 #defineTASK_4_PRIO15 #defineTASK_5_PRIO16 /* ********************************************************************************************************* *VARIABLES ********************************************************************************************************* */ OS_STKTaskStartStk[TASK_STK_SIZE];/*Startuptaskstack*/ OS_STKTaskClkStk[TASK_STK_SIZE];/*Clocktaskstack*/ OS_STKTask1S
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 内核 设计 四个 例子
![提示](https://static.bingdoc.com/images/bang_tan.gif)