哲学家问题ucosii.docx

上传人:b****8 文档编号:9679448 上传时间:2023-02-05 格式:DOCX 页数:10 大小:29.62KB
下载 相关 举报
哲学家问题ucosii.docx_第1页
第1页 / 共10页
哲学家问题ucosii.docx_第2页
第2页 / 共10页
哲学家问题ucosii.docx_第3页
第3页 / 共10页
哲学家问题ucosii.docx_第4页
第4页 / 共10页
哲学家问题ucosii.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

哲学家问题ucosii.docx

《哲学家问题ucosii.docx》由会员分享,可在线阅读,更多相关《哲学家问题ucosii.docx(10页珍藏版)》请在冰豆网上搜索。

哲学家问题ucosii.docx

哲学家问题ucosii

大连理工大学实验报告

学院(系):

软件学院专业:

软件工程(日语强化)班级:

实验3:

uCOS-II哲学家就餐问题

1、实验目的和要求

Uc/Os哲学家问题(信号量——哲学家就餐)

目的:

用ucos-ii解决哲学家就餐问题

要求:

试利用uc/os提供的任务和信号量机制,设计一个简单的应用程序,实现哲学家就餐问题的解决。

2、实验原理和内容

内容:

实现每个哲学家获得自己身边的两支筷子(即每个任务同时获得两个相邻的信号量)

原理:

操作系统任务调度的机制,操作系统任务间通讯的机制,uC/OS-II操作系统下多任务应用程序的编写。

3、主要仪器设备

装有Win7或WinXP的PC机

S3c2440的实验板

4、实验步骤与操作方法

#include"config.h"

 

//=======================================

#include"app_cfg.h"

#include"Printf.h"

//=========================================

OS_STKMainTaskStk[MainTaskStkLengh];

OS_STKTask0Stk[Task0StkLengh];//DefinetheTask0stack

OS_STKTask1Stk[Task1StkLengh];//DefinetheTask1stack

OS_STKTask2Stk[Task1StkLengh];

OS_STKTask3Stk[Task1StkLengh];

OS_STKTask4Stk[Task1StkLengh];

//OS_STKTask2Stk[Task2StkLengh];//DefinetheTask1stack

 

INT8Utime=0;

OS_EVENT*Sem1;

OS_EVENT*Sem2;

OS_EVENT*Sem3;

OS_EVENT*Sem4;

OS_EVENT*Sem5;

INT8Ucount=0;

//货物数量

//OS_EVENT*Sem2=OSSemCreate

(1);//空闲位置

INT8U*err;

intMain(intargc,char**argv)

{

//初始化目标板

TargetInit();

//初始化uC/OS

OSInit();

//初始化系统时基

OSTimeSet(0);

 

Sem1=OSSemCreate

(1);

Sem2=OSSemCreate

(1);

Sem3=OSSemCreate

(1);

Sem4=OSSemCreate

(1);

Sem5=OSSemCreate

(1);

//创建系统初始任务

OSTaskCreate(MainTask,(void*)0,&MainTaskStk[MainTaskStkLengh-1],0);

OSStart();

}

voidMainTask(void*pdata)//MainTaskcreatetaks0andtask1

{

#ifOS_CRITICAL_METHOD==3/*AllocatestorageforCPUstatusregister*/

OS_CPU_SRcpu_sr;

#endif

OS_ENTER_CRITICAL();

Timer0Init();//initialtimer0forucostimetick

ISRInit();//initialinterruptprioorenableordisable

//GUI_Init();

OS_EXIT_CRITICAL();

OSPrintfInit();//usetasktoprintmassagetoUart

OSStatInit();

OSTaskCreate(Task0,(void*)0,&Task0Stk[Task0StkLengh-1],2);

OSTaskCreate(Task1,(void*)0,&Task1Stk[Task1StkLengh-1],3);

OSTaskCreate(Task2,(void*)0,&Task2Stk[Task1StkLengh-1],4);

OSTaskCreate(Task3,(void*)0,&Task3Stk[Task1StkLengh-1],5);

OSTaskCreate(Task4,(void*)0,&Task4Stk[Task1StkLengh-1],6);

//OSTaskCreate(Task2,(void*)0,&Task2Stk[Task2StkLengh-1],4);

OSTaskDel(OS_PRIO_SELF);

}

voidTask0(void*pdata)//Initlwipandcreatetask2

{

#ifOS_CRITICAL_METHOD==3/*AllocatestorageforCPUstatusregister*/

OS_CPU_SRcpu_sr;

#endif

OSPrintf("aaTask0Called\n");

 

while

(1)

{

OSSchedLock();

count++;

if(count!

=5)

{

OSSemPend(Sem1,50000,err);

OSSemPend(Sem5,50000,err);

OSPrintf("哲学家使用筷子1和5\n\n");

OSTimeDlyHMSM(0,0,1,0);

OSSemPost(Sem1);

OSSemPost(Sem5);

}

count--;

OSSchedUnlock();

OSTimeDlyHMSM(0,0,3,0);

}

}

voidTask1(void*pdata)//Initlwipandcreatetask2

{

#ifOS_CRITICAL_METHOD==3/*AllocatestorageforCPUstatusregister*/

OS_CPU_SRcpu_sr;

#endif

//OSPrintf("aaTask0Called\n");

 

while

(1)

{

OSSchedLock();

count++;

if(count!

=5)

{

OSSemPend(Sem2,50000,err);

OSSemPend(Sem1,50000,err);

OSPrintf("哲学家使用筷子2和1\n\n");

OSTimeDlyHMSM(0,0,1,0);

OSSemPost(Sem2);

OSSemPost(Sem1);

}

count--;

OSSchedUnlock();

OSTimeDlyHMSM(0,0,2,0);

}

}

voidTask2(void*pdata)//Initlwipandcreatetask2

{

#ifOS_CRITICAL_METHOD==3/*AllocatestorageforCPUstatusregister*/

OS_CPU_SRcpu_sr;

#endif

//OSPrintf("aaTask0Called\n");

 

while

(1)

{

OSSchedLock();

count++;

if(count!

=5)

{

OSSemPend(Sem3,50000,err);

OSSemPend(Sem2,50000,err);

OSPrintf("哲学家使用筷子3和2\n\n");

OSTimeDlyHMSM(0,0,1,0);

OSSemPost(Sem2);

OSSemPost(Sem3);

}

count--;

OSSchedUnlock();

OSTimeDlyHMSM(0,0,1,0);

}

}//Task2

voidTask3(void*pdata)//Initlwipandcreatetask2

{

#ifOS_CRITICAL_METHOD==3/*AllocatestorageforCPUstatusregister*/

OS_CPU_SRcpu_sr;

#endif

//OSPrintf("aaTask0Called\n");

 

while

(1)

{

OSSchedLock();

count++;

if(count!

=5)

{

OSSemPend(Sem4,50000,err);

OSSemPend(Sem3,50000,err);

OSPrintf("哲学家使用筷子4和3\n\n");

OSTimeDlyHMSM(0,0,2,0);

OSSemPost(Sem3);

OSSemPost(Sem4);

}

count--;

OSSchedUnlock();

OSTimeDlyHMSM(0,0,2,0);

}

}

voidTask4(void*pdata)//Initlwipandcreatetask2

{

#ifOS_CRITICAL_METHOD==3/*AllocatestorageforCPUstatusregister*/

OS_CPU_SRcpu_sr;

#endif

//OSPrintf("aaTask0Called\n");

 

while

(1)

{

OSSchedLock();

count++;

if(count!

=5)

{

OSSemPend(Sem5,50000,err);

OSSemPend(Sem4,50000,err);

OSPrintf("哲学家使用筷子5和4\n\n");

OSTimeDlyHMSM(0,0,2,0);

OSSemPost(Sem4);

OSSemPost(Sem5);

}

count--;

OSSchedUnlock();

OSTimeDlyHMSM(0,0,2,0);

}

}

实验结果展示:

6、实验结果与分析

实验结果如上,与预期结果吻合。

7、讨论、建议、质疑

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

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1