实时操作系统实验3.docx
- 文档编号:9218203
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:15
- 大小:37.72KB
实时操作系统实验3.docx
《实时操作系统实验3.docx》由会员分享,可在线阅读,更多相关《实时操作系统实验3.docx(15页珍藏版)》请在冰豆网上搜索。
实时操作系统实验3
实时操作系统实验报告
专业:
11通信工程
学号:
20110306136
姓名:
王帅
指导老师:
申屠浩
实验三信号量编程实验
实验目的:
1.理解信号量的作用,特别是互斥操作和同步操作;
2.掌握利用信号量操作函数实现简单的生产者/消费者问题;
3.掌握下列信号量操作函数及其使用方法:
4.OSSemCreate、OSSemPend、OSSemPost
实验要求与思路:
1.利用信号量实现同步操作,Task1每隔2spost消息,表示生产完成,并显示生产完成信息。
Task2等待信号量,等待成功后显示消息,重新等待。
2.利用信号量实现互斥操作。
Task1和Task2竞争使用Fun函数,Task1(低优先级)每隔2秒请求一次信号量,Task2(高优先级)每隔2.5秒请求一次信号量。
Fun函数调用后会延时1秒后返回。
实现提示:
1.在调用信号量函数前后,分别显示提示信息。
2.提示信息显示在不同的行上。
3.Fun函数中显示延时开始和延时结束信息。
实验程序:
实验1.
/*
*********************************************************************************************************
*uC/OS-II
*TheReal-TimeKernel
*EXAMPLE
*********************************************************************************************************
*/
#include"includes.h"
/*
*********************************************************************************************************
*CONSTANTS
*********************************************************************************************************
*/
#defineTASK_STK_SIZE512/*Sizeofeachtask'sstacks(#ofWORDs)*/
/*
*********************************************************************************************************
*VARIABLES
*********************************************************************************************************
*/
INT8Uy=10;
char*s1="TASK1post";
char*s2="TASK2pend";
char*s3="TASK2require";
OS_EVENT*Fun_Semp;
OS_STKTaskStk_1[TASK_STK_SIZE];
OS_STKTaskStk_2[TASK_STK_SIZE];
OS_STKTaskStartStk[TASK_STK_SIZE];
/*
*********************************************************************************************************
*FUNCTIONPROTOTYPES
*********************************************************************************************************
*/
voidTask1(void*data);/*Functionprototypesoftasks*/
voidTask2(void*data);
voidTaskStart(void*data);/*FunctionprototypesofStartuptask*/
staticvoidTaskStartCreateTasks(void);
staticvoidTaskStartDispInit(void);
/*
*********************************************************************************************************
*MAIN
*********************************************************************************************************
*/
voidmain(void)
{
PC_DispClrScr(DISP_FGND_WHITE+DISP_BGND_BLACK);/*Clearthescreen*/
Fun_Semp=OSSemCreate
(1);
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(Task1,(void*)0,&TaskStk_1[TASK_STK_SIZE-1],0);
OSTaskCreate(Task2,(void*)0,&TaskStk_2[TASK_STK_SIZE-1],1);
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
*********************************************************************************************************
*/
voidTask1(void*pdata)
{
INT8Uerr;
pdata=pdata;
for(;;){
{PC_DispStr(40,++y,s1,DISP_FGND_BLACK+DISP_BGND_LIGHT_GRAY);
OSSemPost(Fun_Semp);}
OSTimeDlyHMSM(0,0,2,0);
}
}
voidTask2(void*pdata)
{
INT8Uerr;
pdata=pdata;
for(;;){
PC_DispStr(40,++y,s2,DISP_FGND_BLACK+DISP_BGND_LIGHT_GRAY);
OSSemPend(Fun_Semp,0,&err);
PC_DispStr(40,++y,s3,DISP_FGND_BLACK+DISP_BGND_LIGHT_GRAY);
OSTimeDlyHMSM(0,0,2,0);
}
}
实验2
#include"includes.h"
#defineTASK_STK_SIZE512
OS_STKTaskStk1[TASK_STK_SIZE];
OS_STKTaskStk2[TASK_STK_SIZE];
OS_STKTaskStartStk[TASK_STK_SIZE];
char*s1="Task0";
char*s2="Task1";
voidTask0(void*data);
voidTask1(void*data);
OS_EVENT*Semp;
INT8Uy=0;
voidFun(INT8Ux,INT8Uy);/*Functionprototypesoftasks*/
voidTaskStart(void*data);/*FunctionprototypesofStartuptask*/
staticvoidTaskStartCreateTasks(void);
staticvoidTaskStartDispInit(void);
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*/
Semp=OSSemCreate
(1);
OSTaskCreate(TaskStart,(void*)0,&TaskStartStk[TASK_STK_SIZE-1],4);
OSStart();/*Startmultitasking*/
}
voidTaskStart(void*pdata)
{
#ifOS_CRITICAL_METHOD==3/*AllocatestorageforCPUstatusregister*/
OS_CPU_SRcpu_sr;
#endif
chars[100];
INT16Skey;
pdata=pdata;
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(Task0,(void*)0,&TaskStk1[TASK_STK_SIZE-1],1);
OSTaskCreate(Task1,(void*)0,&TaskStk2[TASK_STK_SIZE-1],2);
for(;;){
if(PC_GetKey(&key)==TRUE){/*Seeifkeyhasbeenpressed*/
if(key==0x1B){/*Yes,seeifit'stheESCAPEkey*/
PC_DOSReturn();/*ReturntoDOS*/
}
}
OSCtxSwCtr=0;/*Clearcontextswitchcounter*/
OSTimeDly
(1);
}
}
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);
}
voidTask0(void*pdata)
{
charss[30];
INT8Uerr;
pdata=pdata;
for(;;){
{
OSSemPend(Semp,0,&err);
PC_DispStr(10,++y,s1,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实时 操作系统 实验