实验报告示例.docx

上传人:b****1 文档编号:23063731 上传时间:2023-04-30 格式:DOCX 页数:12 大小:39.74KB
下载 相关 举报
实验报告示例.docx_第1页
第1页 / 共12页
实验报告示例.docx_第2页
第2页 / 共12页
实验报告示例.docx_第3页
第3页 / 共12页
实验报告示例.docx_第4页
第4页 / 共12页
实验报告示例.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

实验报告示例.docx

《实验报告示例.docx》由会员分享,可在线阅读,更多相关《实验报告示例.docx(12页珍藏版)》请在冰豆网上搜索。

实验报告示例.docx

实验报告示例

实时操作系统实验报告

 

专业:

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修改。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1