有关操作操作系统报告.docx

上传人:b****6 文档编号:12121343 上传时间:2023-06-04 格式:DOCX 页数:42 大小:274.93KB
下载 相关 举报
有关操作操作系统报告.docx_第1页
第1页 / 共42页
有关操作操作系统报告.docx_第2页
第2页 / 共42页
有关操作操作系统报告.docx_第3页
第3页 / 共42页
有关操作操作系统报告.docx_第4页
第4页 / 共42页
有关操作操作系统报告.docx_第5页
第5页 / 共42页
有关操作操作系统报告.docx_第6页
第6页 / 共42页
有关操作操作系统报告.docx_第7页
第7页 / 共42页
有关操作操作系统报告.docx_第8页
第8页 / 共42页
有关操作操作系统报告.docx_第9页
第9页 / 共42页
有关操作操作系统报告.docx_第10页
第10页 / 共42页
有关操作操作系统报告.docx_第11页
第11页 / 共42页
有关操作操作系统报告.docx_第12页
第12页 / 共42页
有关操作操作系统报告.docx_第13页
第13页 / 共42页
有关操作操作系统报告.docx_第14页
第14页 / 共42页
有关操作操作系统报告.docx_第15页
第15页 / 共42页
有关操作操作系统报告.docx_第16页
第16页 / 共42页
有关操作操作系统报告.docx_第17页
第17页 / 共42页
有关操作操作系统报告.docx_第18页
第18页 / 共42页
有关操作操作系统报告.docx_第19页
第19页 / 共42页
有关操作操作系统报告.docx_第20页
第20页 / 共42页
亲,该文档总共42页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

有关操作操作系统报告.docx

《有关操作操作系统报告.docx》由会员分享,可在线阅读,更多相关《有关操作操作系统报告.docx(42页珍藏版)》请在冰点文库上搜索。

有关操作操作系统报告.docx

有关操作操作系统报告

实时操作系统报告

 

专业:

J通信工程0801

学号:

3081109004

姓名:

王吉利

指导老师:

熊书明

完成时间:

2011/4/16

实验一任务编程实验

实验目的:

1.理解任务管理的基本原理,了解任务的各个基本状态及其变迁过程;

2.掌握µC/OS-II系统的编程方法,包括main函数的书写方法,任务组成、创建、启动和时间函数,主要包括:

OSInit;OSStart;OSTaskCreate;PC_DispStr;PC_GetKey;OSTimeDlyHMSM;OSTimeDly;OSTimeGet等。

实验要求与思路:

设计一个任务,利用OSTimeGet实现时间的获取,同时利用PC_DispStr实现时间的显示,同时需要编写一个启动任务实现对时间任务的启动。

实验程序:

#include"includes.h"

/*

*********************************************************************************************************

*CONSTANTS

*********************************************************************************************************

*/

#defineTASK_STK_SIZE512/*Sizeofeachtask'sstacks(#ofWORDs)*/

/*

*********************************************************************************************************

*VARIABLES

*********************************************************************************************************

*/

OS_STKTaskStk[TASK_STK_SIZE];/*Tasksstacks*/

OS_STKTaskStartStk[TASK_STK_SIZE];

 

/*

*********************************************************************************************************

*FUNCTIONPROTOTYPES

*********************************************************************************************************

*/

voidTask(void*data);/*Functionprototypesoftasks*/

voidTaskStart(void*data);/*FunctionprototypesofStartuptask*/

staticvoidTaskStartCreateTasks(void);

staticvoidTaskStartDispInit(void);

/*

*********************************************************************************************************

*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],2);

OSStart();/*Startmultitasking*/

}

 

/*

*********************************************************************************************************

*STARTUPTASK

*********************************************************************************************************

*/

voidTaskStart(void*pdata)

{

#ifOS_CRITICAL_METHOD==3/*AllocatestorageforCPUstatusregister*/

OS_CPU_SRcpu_sr;

#endif

chars[100];

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*/

OSTaskCreate(Task,(void*)0,&TaskStk[TASK_STK_SIZE-1],0);

for(;;){

if(PC_GetKey(&key)==TRUE){/*Seeifkeyhasbeenpressed*/

if(key==0x1B){/*Yes,seeifit'stheESCAPEkey*/

PC_DOSReturn();/*ReturntoDOS*/

}

}

OSCtxSwCtr=0;/*Clearcontextswitchcounter*/

OSTimeDly

(1);

}

}

 

/*

*********************************************************************************************************

*INITIALIZETHEDISPLAY

*********************************************************************************************************

*/

staticvoidTaskStartDispInit(void)

{

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,"TimeEXAMPLE",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,"",DISP_FGND_BLACK+DISP_BGND_LIGHT_GRAY);

PC_DispStr(0,11,"",DISP_FGND_BLACK+DISP_BGND_LIGHT_GRAY);

PC_DispStr(0,12,"",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,"<-PRESS'ESC'TOQUIT->",DISP_FGND_BLACK+DISP_BGND_LIGHT_GRAY+DISP_BLINK);

}

 

/*

*********************************************************************************************************

*TASKS

*********************************************************************************************************

*/

voidTask(void*pdata)

{

charss[30];

INT8Uerr;

pdata=pdata;

for(;;){

sprintf(ss,"Time=%ld",OSTimeGet());

PC_DispStr(40,10,ss,DISP_FGND_BLACK+DISP_BGND_LIGHT_GRAY);

OSTimeDlyHMSM(0,0,1,0);/*Waitonesecond*//*Delay1clocktick*/

}

}

 

实验截图:

实验感想:

通过这次实验让我了解了μC/OS-II系统的编程的方法,尤其是main函数的书写方法,以及函数的调用的用法,进一步巩固了c语言的知识。

在μC/OS-I制块。

本次实验用到的功能函数就是OSTimeGet(),实现了可以随时获取系统的时间,对于显示时间的函数I任务的创建中,掌握了任务堆栈的定义(os_stkTaskStk[TASK_STK_SIZE])方法,以及任务创建函数中各个参数的意义,创建一个任务就是创建一个任务的任务控主要通过

sprintf(ss,"Time=%ld",OSTimeGet());

PC_DispStr(40,10,ss,DISP_FGND_BLACK+DISP_BGND_LIGHT_GRAY);实现。

要求时间每次以200tick跳转,则通过函数OSTimeDlyHMSM(0,0,1,0);即:

系统延时一秒钟就可以实现每次以200tick跳转。

对于每个任务的运行还需要一个时间启动任务来执行,即:

TaskStart(void*data);

实验二任务管理实验

实验目的:

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)如此循环

实验程序

#include"includes.h"

/*

*********************************************************************************************************

*CONSTANTS

*********************************************************************************************************

*/

#defineTASK_STK_SIZE512/*Sizeofeachtask'sstacks(#ofWORDs)*/

#defineN_TASKS3/*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*/

/*0123456789012

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

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2