实验报告示例_第1页
实验报告示例_第2页
实验报告示例_第3页
实验报告示例_第4页
实验报告示例_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实时操作系统实验报告专业: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];/*TasksstacksOS_STKTaskStartStk[TASK_STK_SIZE];/*TaskStarttaskstackINT8UTaskData[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;#endifINT16Skey;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<N_TASKS;i++){/*Createtasks*/ 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_DispSt

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论