哲学家问题ucosii.docx
- 文档编号:9679448
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:10
- 大小:29.62KB
哲学家问题ucosii.docx
《哲学家问题ucosii.docx》由会员分享,可在线阅读,更多相关《哲学家问题ucosii.docx(10页珍藏版)》请在冰豆网上搜索。
哲学家问题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、讨论、建议、质疑
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 哲学家 问题 ucosii