版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实时操作系统实验报告专业: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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 戏剧艺术批评实践考察试题及答案
- 2025年消防工程设计与管理手册
- 雷达及配套设施制造标准化操作规程手册
- 工厂厂区环境卫生保洁手册
- 绿化苗木种植定植规范手册
- 镇政府目标考核制度
- 高校KPI考核制度
- smt工位考核制度
- 市场部考核制度模板
- 学校科目一考核制度
- 医学人文关怀培训课件
- 《传感器与检测技术》课件-热电阻测温传感器
- 2025年小学三年级语文单元测试模拟卷(含答案)
- 2026年汉中职业技术学院单招职业技能测试必刷测试卷必考题
- 2025年国考航空运输岗结构化面试情景模拟题经典案例30例
- M9000会议管理系统 操作指导
- 突发性耳聋病例分析与诊疗
- 2025年新高考1卷(新课标Ⅰ卷)英语试卷(含答案解析)+听力音频+听力原文
- 三年级语文童话、寓言类文章阅读专项训练(含答案-适合各版本教材)
- 语文七年级下字帖打印版
- 2022年河南省郑州外国语中学中考英语段考试卷(附答案详解)
评论
0/150
提交评论