




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实时操作系统实验报告专业: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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 风电技能培训课件图片高清
- 青年群体游戏实践的媒介仪式建构研究
- 含苯并咪唑结构热固性聚酰亚胺的制备与性能研究
- 第九版外科肿瘤免疫治疗临床指南解读
- 急救护理笔记方法教程
- 神经炎护理常规
- 脑出血术后护理诊断及护理措施
- 管理学人事任免案例
- 全麻疝气健康宣教
- 颅脑CT检查技术课件
- 糖尿病酮症酸中毒疑难病例护理
- 2025年诗词大赛考试指导题库300题(含答案)
- 居民生活垃圾转运投标方案(技术方案)
- 《智慧园艺》课程教学大纲
- 2025年上半年工作总结及下半年工作计划简单版(2篇)
- 企业道路交通安全宣传
- 635MPa级热轧带肋高强钢筋应用技术规程
- 中专《电工基础》课程标准
- 他汀不耐受的临床诊断与处理中国专家共识(2024)解读课件
- 2024年7月国家开放大学法学本科《知识产权法》期末考试试题及答案
- 2024移动金融客户端应用软件安全管理规范标准
评论
0/150
提交评论