实时操作系统.docx

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

实时操作系统.docx

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

实时操作系统.docx

实时操作系统

实时操作系统实验报告

 

实验一任务管理实验

实验目的:

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

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

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

实验要求与思路:

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

实验程序:

/*

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

*uC/OS-II

*TheReal-TimeKernel

*EXAMPLE

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

*/

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

}

}

实验输出:

 

实验感想:

通过这次的实验,我大致的了解了如何的实现bc的调试,同时对于u/cosII有了直观的了解,同时我知道了对于任务的建立和如何的进行形式的输出,对于Pc_DispStr输出函数的了解。

实验二任务管理实验

实验目的:

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(

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

当前位置:首页 > 外语学习 > 法语学习

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

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