实时操作系统.docx
- 文档编号:11989127
- 上传时间:2023-04-16
- 格式:DOCX
- 页数:40
- 大小:126.56KB
实时操作系统.docx
《实时操作系统.docx》由会员分享,可在线阅读,更多相关《实时操作系统.docx(40页珍藏版)》请在冰豆网上搜索。
实时操作系统
实时操作系统实验报告
实验一任务管理实验
实验目的:
●理解任务管理的基本原理,了解任务的各个基本状态及其变迁过程;
●掌握µ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(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实时 操作系统