实验报告示例Word格式文档下载.docx
- 文档编号:363700
- 上传时间:2023-04-28
- 格式:DOCX
- 页数:12
- 大小:39.74KB
实验报告示例Word格式文档下载.docx
《实验报告示例Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《实验报告示例Word格式文档下载.docx(12页珍藏版)》请在冰点文库上搜索。
在系统完成初始化后,可以先创建并启动优先级最低的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);
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,"
PC_DispStr(0,3,"
EXAMPLE#1TaskManagement"
PC_DispStr(0,4,"
PC_DispStr(0,5,"
PC_DispStr(0,6,"
PC_DispStr(0,7,"
PC_DispStr(0,8,"
PC_DispStr(0,9,"
PC_DispStr(0,10,"
Task0():
PC_DispStr(0,11,"
Task1():
PC_DispStr(0,12,"
Task2():
PC_DispStr(0,13,"
PC_DispStr(0,14,"
PC_DispStr(0,15,"
PC_DispStr(0,16,"
PC_DispStr(0,17,"
PC_DispStr(0,18,"
PC_DispStr(0,19,"
PC_DispStr(0,20,"
PC_DispStr(0,21,"
PC_DispStr(0,22,"
PC_DispStr(0,23,"
PC_DispStr(0,24,"
<
-PRESS'
ESC'
TOQUIT->
DISP_FGND_BLACK+DISP_BGND_LIGHT_GRAY+DISP_BLINK);
*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);
*TASK#0
*
*Description:
Thistaskissuspendedbyitself,thenitwillberesumedbyothertasks.
voidTask0(void*pdata)
INT8Uerr;
i=*(int*)pdata;
PC_DispStr(14,10,"
task0isrunning."
PC_DispStr(14,11,"
task1issuspended."
PC_DispStr(14,12,"
task2issuspended."
OSTimeDly(200);
err=OSTaskResume(6);
err=OSTaskSuspend(5);
/*suspenditself*/
*TASK#1
Thistaskresumetask0
voidTask1(void*pdata)
task0issuspended."
task1isrunning."
OSTimeDly(200);
err=OSTaskResume(7);
/*resumetask0*/
err=OSTaskSuspend(6);
*TASK#2
voidTask2(void*pdata)
task2isrunning."
err=OSTaskResume(5);
err=OSTaskSuspend(7);
实验截图:
实验感想
通过这次实验使我掌握μC/OS-II中任务管理的基本方法(挂起、解挂),首先在主函数中创建初始任务OSTaskCreate,执行OSTaskCreate后,在调用TaskStartCreateTasks,在TaskStartCreateTasks实现3个应用任务T0、T1和T2循环挂起和唤醒,每个任务运行时要保证其他任务被挂起,而且要在挂起之前唤醒下一个任务。
显示设置可以修改TaskStartDispInit函数或者在Task0Task1Task2修改。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 报告 示例
![提示](https://static.bingdoc.com/images/bang_tan.gif)