操作系统课程设计报告书.docx
- 文档编号:6471130
- 上传时间:2023-01-06
- 格式:DOCX
- 页数:54
- 大小:302.10KB
操作系统课程设计报告书.docx
《操作系统课程设计报告书.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计报告书.docx(54页珍藏版)》请在冰豆网上搜索。
操作系统课程设计报告书
《操作系统》
课程设计报告
实验1
一、实验描述
实验1有13个任务(包括μCOS-II的空闲任务)。
μCOS-II增加了两个内部任务:
空闲任务和一个计算CPU利用率的任务。
实验一1建立了11个其它任务。
TaskStart()任务是在函数main()中建立的;它的功能是建立其它任务并且在屏幕上显示如下统计信息:
●每秒钟任务切换次数;
●CPU利用百分率;
●寄存器切换次数;
●目前日期和时间;
●μCOS-II的版本号;
TaskStart()还检查是否按下ESC键,以决定是否返回到DOS。
其余10个任务基于相同的代码——Task();每个任务在屏幕上随机的位置显示一个0到9的数字。
二、问题分析
1、功能分析
在屏幕上显示如下统计信息:
●每秒钟任务切换次数;
●CPU利用百分率;
●寄存器切换次数;
●目前日期和时间;
●μCOS-II的版本号;
在屏幕上随机的位置显示一个0到9的数字。
2、数据对象分析
在屏幕随机位置显示0~9的数字
3、代码设计
Includes文件中
#include
#defineOS_MAX_FLAGS5*Max.numberofEventFlagGroupsinyourapplication...**...MUSTbe>0*
#defineOS_MAX_MEM_PART5*Max.numberofmemorypartitions...**...MUSTbe>0*
#defineOS_MAX_QS2*Max.numberofqueuecontrolblocksinyourapplication...**...MUSTbe>0*
#defineOS_MAX_TASKS11*Max.numberoftasksinyourapplication...**...MUSTbe>=2*
#defineOS_LOWEST_PRIO12*Definesthelowestprioritythatcanbeassigned...**...MUSTNEVERbe63!
*
#defineOS_TASK_IDLE_STK_SIZE512*Idletaskstacksize(#ofOS_STKwideentries)*
#defineOS_TASK_STAT_EN1*Enable
(1)orDisable(0)thestatisticstask*
#defineOS_TASK_STAT_STK_SIZE512*Statisticstaskstacksize(#ofOS_STKwideentries)*
#defineOS_ARG_CHK_EN1*Enable
(1)orDisable(0)argumentchecking*
#defineOS_CPU_HOOKS_EN1*uCOS-IItheprocessorportfiles**-----------------------EVENTFLAGS------------------------*
#defineOS_FLAG_EN1*Enable
(1)orDisable(0)codegenerationforEVENTFLAGS*
#defineOS_FLAG_WAIT_CLR_EN1*IncludecodeforWaitonClearEVENTFLAGS*
#defineOS_FLAG_ACCEPT_EN1*IncludecodeforOSFlagAccept()*
#defineOS_FLAG_DEL_EN1*IncludecodeforOSFlagDel()*
#defineOS_FLAG_QUERY_EN1*IncludecodeforOSFlagQuery()**--------------------MESSAGEMAILBOXES---------------------*
#defineOS_MBOX_EN1*Enable
(1)orDisable(0)codegenerationforMAILBOXES*
#defineOS_MBOX_ACCEPT_EN1*IncludecodeforOSMboxAccept()*
#defineOS_MBOX_DEL_EN1*IncludecodeforOSMboxDel()*
#defineOS_MBOX_POST_EN1*IncludecodeforOSMboxPost()*
#defineOS_MBOX_POST_OPT_EN1*IncludecodeforOSMboxPostOpt()*
#defineOS_MBOX_QUERY_EN1*IncludecodeforOSMboxQuery()**---------------------MEMORYMANAGEMENT--------------------*
#defineOS_MEM_EN1*Enable
(1)orDisable(0)codegenerationforMEMORYMANAGER*
#defineOS_MEM_QUERY_EN1*IncludecodeforOSMemQuery()**----------------MUTUALEXCLUSIONSEMAPHORES---------------*
#defineOS_MUTEX_EN1*Enable
(1)orDisable(0)codegenerationforMUTEX*
#defineOS_MUTEX_ACCEPT_EN1*IncludecodeforOSMutexAccept()*
#defineOS_MUTEX_DEL_EN1*IncludecodeforOSMutexDel()*
#defineOS_MUTEX_QUERY_EN1*IncludecodeforOSMutexQuery()**----------------------MESSAGEQUEUES----------------------*
#defineOS_Q_EN1*Enable
(1)orDisable(0)codegenerationforQUEUES*
#defineOS_Q_ACCEPT_EN1*IncludecodeforOSQAccept()*
#defineOS_Q_DEL_EN1*IncludecodeforOSQDel()*
#defineOS_Q_FLUSH_EN1*IncludecodeforOSQFlush()*
#defineOS_Q_POST_EN1*IncludecodeforOSQPost()*
#defineOS_Q_POST_FRONT_EN1*IncludecodeforOSQPostFront()*
#defineOS_Q_POST_OPT_EN1*IncludecodeforOSQPostOpt()*
#defineOS_Q_QUERY_EN1*IncludecodeforOSQQuery()**------------------------SEMAPHORES------------------------*
#defineOS_SEM_EN1*Enable
(1)orDisable(0)codegenerationforSEMAPHORES*
#defineOS_SEM_ACCEPT_EN1*IncludecodeforOSSemAccept()*
#defineOS_SEM_DEL_EN1*IncludecodeforOSSemDel()*
#defineOS_SEM_QUERY_EN1*IncludecodeforOSSemQuery()**---------------------TASKMANAGEMENT----------------------*
#defineOS_TASK_CHANGE_PRIO_EN1*IncludecodeforOSTaskChangePrio()*
#defineOS_TASK_CREATE_EN1*IncludecodeforOSTaskCreate()*
#defineOS_TASK_CREATE_EXT_EN1*IncludecodeforOSTaskCreateExt()*
#defineOS_TASK_DEL_EN1*IncludecodeforOSTaskDel()*
#defineOS_TASK_SUSPEND_EN1*IncludecodeforOSTaskSuspend()andOSTaskResume()*
#defineOS_TASK_QUERY_EN1*IncludecodeforOSTaskQuery()**---------------------TIMEMANAGEMENT----------------------*
#defineOS_TIME_DLY_HMSM_EN1*IncludecodeforOSTimeDlyHMSM()*
#defineOS_TIME_DLY_RESUME_EN1*IncludecodeforOSTimeDlyResume()*
#defineOS_TIME_GET_SET_EN1*IncludecodeforOSTimeGet()andOSTimeSet()**----------------------MISCELLANEOUS-----------------------*
#defineOS_SCHED_LOCK_EN1*IncludecodeforOSSchedLock()andOSSchedUnlock()*
#defineOS_TICKS_PER_SEC200*Setthenumberofticksinonesecond*
typedefINT16UOS_FLAGS;*Datetypeforeventflagbits(8,16or32bits)*
Test1文件中
#include"includes.prototypesoftasks*
voidTaskStart(void*data);*FunctionprototypesofStartuptask*
staticvoidTaskStartCreateTasks(void);
staticvoidTaskStartDispInit(void);
StaticvoidTaskStartDisp(void);*$PAGE*voidmain(void){PC_DispClrScr(DISP_FGND_WHITE+DISP_BGND_BLACK);*Clearthescreen*
OSInit();*InitializeuCOS-II*
PC_DOSSaveReturn();*SaveenvironmenttoreturntoDOS*
PC_VectSet(uCOS,OSCtxSw);*InstalluCOS-II'scontextswitchvector*
RandomSem=OSSemCreate
(1);*Randomnumbersemaphore*
OSTaskCreate(TaskStart,(void*)0,&TaskStartStk[TASK_STK_SIZE-1],0);OSStart();*Startmultitasking*
}
voidTaskStart(void*pdata){
#ifOS_CRITICAL_METHOD==3*AllocatestorageforCPUstatusregister*OS_CPU_SRcpu_sr;
#endifchars[100];
INT16Skey;
pdata=pdata;*Preventcompilerwarning*
TaskStartDispInit();*Initializethedisplay*
OS_ENTER_CRITICAL();
PC_VectSet(0x08,OSTickISR);*InstalluCOS-II'sclocktickISR*
PC_SetTickRate(OS_TICKS_PER_SEC);*Reprogramtickrate*
OS_EXIT_CRITICAL();
OSStatInit();*InitializeuCOS-II'sstatistics*
TaskStartCreateTasks();*Createalltheapplicationtasks*
for(;;){TaskStartDisp();*Updatethedisplay*
if(PC_GetKey(&key)==TRUE){*Seeifkeypressed*
if(key==0x1B){*Yes,seeifit'stheESCAPEkey*PC_DOSReturn();*ReturntoDOS*
}
}
OSCtxSwCtr=0;*Clearcontextswitchcounter*
OSTimeDlyHMSM(0,0,1,0);*Waitonesecond*
}
}*$PAGE*
staticvoidTaskStartDispInit(void){
*1111111111222222222233333333334444444444555555555566666666667777777777*
*01234567890123456789012345678901234567890123456789012345678901234567890123456789*
PC_DispStr(0,0,"uCOS-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,"EXAMPLE#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,"#Taskswitchsec:
",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);*DisplayuCOS-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********************************************************************************
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 课程设计 报告书