哲学家问题ucosii文档格式.docx
《哲学家问题ucosii文档格式.docx》由会员分享,可在线阅读,更多相关《哲学家问题ucosii文档格式.docx(10页珍藏版)》请在冰豆网上搜索。
内容:
实现每个哲学家获得自己身边的两支筷子(即每个任务同时获得两个相邻的信号量)
原理:
操作系统任务调度的机制,操作系统任务间通讯的机制,uC/OS-II操作系统下多任务应用程序的编写。
3、主要仪器设备
装有Win7或WinXP的PC机
S3c2440的实验板
4、实验步骤与操作方法
#include"
config.h"
//=======================================
app_cfg.h"
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];
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
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
//OSPrintf("
OSSemPend(Sem2,50000,err);
哲学家使用筷子2和1\n\n"
OSSemPost(Sem2);
OSTimeDlyHMSM(0,0,2,0);
voidTask2(void*pdata)//Initlwipandcreatetask2
OSSemPend(Sem3,50000,err);
哲学家使用筷子3和2\n\n"
OSSemPost(Sem3);
OSTimeDlyHMSM(0,0,1,0);
}//Task2
voidTask3(void*pdata)//Initlwipandcreatetask2
OSSemPend(Sem4,50000,err);
哲学家使用筷子4和3\n\n"
OSTimeDlyHMSM(0,0,2,0);
OSSemPost(Sem4);
voidTask4(void*pdata)//Initlwipandcreatetask2
哲学家使用筷子5和4\n\n"
实验结果展示:
6、实验结果与分析
实验结果如上,与预期结果吻合。
7、讨论、建议、质疑