实验报告示例.docx
- 文档编号:23063731
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:12
- 大小:39.74KB
实验报告示例.docx
《实验报告示例.docx》由会员分享,可在线阅读,更多相关《实验报告示例.docx(12页珍藏版)》请在冰豆网上搜索。
实验报告示例
实时操作系统实验报告
专业:
J通信0601
学号:
3061109015
姓名:
蔡智超
指导老师:
李峰
实验二任务管理实验
实验目的:
1.理解任务管理的基本原理,了解任务的各个基本状态及其变迁过程;
2.掌握μC/OS-II中任务管理的基本方法(挂起、解挂);
3.熟练使用μC/OS-II任务管理的基本系统调用。
实验要求与思路:
为了体现任务的各个基本状态及其变迁过程,本实验设计了T0、T1和T3
三个任务,它们交替运行,如图所示
说明:
在系统完成初始化后,可以先创建并启动优先级最低的TaskStart,由它创
建其他3个应用任务T0、T1和T2,之后整个系统的运行流程如下:
1)优先级最高的T0开始执行,之后T0挂起自己;
2)然后系统调度选中T1开始执行,之后T1挂起自己;
3)接着系统调度选中T2,之后唤醒T0;
4)如此循环
实验程序:
*********************************************************************************************************
*uC/OS-II
*TheReal-TimeKernel
*EX#1TaskManagement
*********************************************************************************************************
#include"includes.h"
*********************************************************************************************************
*CONSTANTS
*********************************************************************************************************
#defineTASK_STK_SIZE512/*Sizeofeachtask'sstacks(#ofWORDs)*/
#defineN_TASKS2/*Numberofidenticaltasks
*VARIABLES
*********************************************************************************************************
*/
OS_STKTaskStk[N_TASKS][TASK_STK_SIZE];/*Tasksstacks
OS_STKTaskStartStk[TASK_STK_SIZE];/*TaskStarttaskstack
INT8UTaskData[N_TASKS];/*Parameterstopasstoeachtask
/*
*FUNCTIONPROTOTYPES
*********************************************************************************************************
*/
voidTask0(void*pdata);/*Functionprototypesoftasks*/
voidTask1(void*pdata);
voidTask2(void*pdata);
voidTaskStart(void*pdata);/*FunctionprototypesofStartuptask*/
staticvoidTaskStartCreateTasks(void);/*Functionprototypesofcreattask*/
staticvoidTaskStartDispInit(void);/*FunctionprototypesofInitializationthedisplay*/
/*$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*/
//创建初始任务
OSTaskCreate(TaskStart,(void*)0,&TaskStartStk[TASK_STK_SIZE-1],4);
OSStart();/*Startmultitasking*/
}
/*
*********************************************************************************************************
*STARTUPTASK
*********************************************************************************************************
*/
voidTaskStart(void*pdata)
{
#ifOS_CRITICAL_METHOD==3/*AllocatestorageforCPUstatusregister*/
OS_CPU_SRcpu_sr;
#endif
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(;;){
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,"",DISP_FGND_BLACK+DISP_BGND_LIGHT_GRAY);
PC_DispStr(0,2,"",DISP_FGND_BLACK+DISP_BGND_LIGHT_GRAY);
PC_DispStr(0,3,"EXAMPLE#1TaskManagement",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,"Task0():
",DISP_FGND_BLACK+DISP_BGND_LIGHT_GRAY);
PC_DispStr(0,11,"Task1():
",DISP_FGND_BLACK+DISP_BGND_LIGHT_GRAY);
PC_DispStr(0,12,"Task2():
",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,"",DISP_FGND_BLACK+DISP_BGND_LIGHT_GRAY);
PC_DispStr(0,23,"",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*/
/*
*********************************************************************************************************
*CREATETASKS
*********************************************************************************************************
*/
staticvoidTaskStartCreateTasks(void)
{
INT8Ui;
INT8Uerr;
for(i=0;i TaskData[i]=i;/*Eachtaskwilldisplayitsowninformation*/ } OSTaskCreate(Task0,(void*)&TaskData[0],&TaskStk[0][TASK_STK_SIZE-1],5); OSTaskCreate(Task1,(void*)&TaskData[1],&TaskStk[1][TASK_STK_SIZE-1],6); OSTaskCreate(Task2,(void*)&TaskData[2],&TaskStk[2][TASK_STK_SIZE-1],7); err=OSTaskSuspend(6);/*确保每个任务运行时其他任务被挂起 err=OSTaskSuspend(7); } /*$PAGE*/ /* ********************************************************************************************************* *TASK#0 * *Description: Thistaskissuspendedbyitself,thenitwillberesumedbyothertasks. ********************************************************************************************************* */ voidTask0(void*pdata) { INT8Ui; INT8Uerr; i=*(int*)pdata; for(;;){ PC_DispStr(14,10,"task0isrunning.",DISP_FGND_BLACK+DISP_BGND_LIGHT_GRAY); PC_DispStr(14,11,"task1issuspended.",DISP_FGND_BLACK+DISP_BGND_LIGHT_GRAY); PC_DispStr(14,12,"task2issuspended.",DISP_FGND_BLACK+DISP_BGND_LIGHT_GRAY); OSTimeDly(200); err=OSTaskResume(6); err=OSTaskSuspend(5);/*suspenditself*/ } } /*$PAGE*/ /* ********************************************************************************************************* *TASK#1 *Description: Thistaskresumetask0 */ voidTask1(void*pdata) { INT8Ui; INT8Uerr; i=*(int*)pdata; for(;;){ OSTimeDly(200); PC_DispStr(14,10,"task0issuspended.",DISP_FGND_BLACK+DISP_BGND_LIGHT_GRAY); PC_DispStr(14,11,"task1isrunning.",DISP_FGND_BLACK+DISP_BGND_LIGHT_GRAY); PC_DispStr(14,12,"task2issuspended.",DISP_FGND_BLACK+DISP_BGND_LIGHT_GRAY); OSTimeDly(200); err=OSTaskResume(7);/*resumetask0*/ err=OSTaskSuspend(6); } } /*$PAGE*/ /* ********************************************************************************************************* *TASK#2 * *Description: Thistaskresumetask0 ********************************************************************************************************* */ voidTask2(void*pdata) { INT8Ui; INT8Uerr; i=*(int*)pdata; for(;;){ OSTimeDly(200); PC_DispStr(14,10,"task0issuspended.",DISP_FGND_BLACK+DISP_BGND_LIGHT_GRAY); PC_DispStr(14,11,"task1issuspended.",DISP_FGND_BLACK+DISP_BGND_LIGHT_GRAY); PC_DispStr(14,12,"task2isrunning.",DISP_FGND_BLACK+DISP_BGND_LIGHT_GRAY); OSTimeDly(200); err=OSTaskResume(5);/*resumetask0*/ err=OSTaskSuspend(7); } } 实验截图: 实验感想 通过这次实验使我掌握μC/OS-II中任务管理的基本方法(挂起、解挂),首先在主函数中创建初始任务OSTaskCreate,执行OSTaskCreate后,在调用TaskStartCreateTasks,在TaskStartCreateTasks实现3个应用任务T0、T1和T2循环挂起和唤醒,每个任务运行时要保证其他任务被挂起,而且要在挂起之前唤醒下一个任务。 显示设置可以修改TaskStartDispInit函数或者在Task0Task1Task2修改。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 报告 示例
![提示](https://static.bdocx.com/images/bang_tan.gif)