⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 umain.c

📁 在S3C44b0上移植ucos并实现哲学家就餐问题的演示
💻 C
字号:
/**************************************************************************
NAME:UMAIN.C ucos_ii MAIN file
copyright:wzz at Qingdao University  2008
**************************************************************************/
#include "..\inc\WOPTIONS.H"
#include "..\ucos\includes.h"
#include "..\porting\port.h"

/**************************************************************************/

#define  TASK_STK_SIZE   512			//任务堆栈长度

OS_STK   StartTaskStk[TASK_STK_SIZE];		//定义任务堆栈区
OS_STK	 PhilosStk[5][TASK_STK_SIZE];
INT8U	 PhilosID[]={1,2,3,4,5};

INT8U   err;
INT8U	i=0;

OS_EVENT *ChopStick[5];

void  StartTask(void *data);
void  Philos(void *data);

/************************主函数*********************************************/
int  main (void)
{
	char temp[50];
	ARMTargetInit();        // do target (uHAL based ARM system) initialisation //
    OSInit();					//初始化uCOS_II
	for(i=0;i<5;i++)
	{
		ChopStick[i]=OSSemCreate(1);
		if (ChopStick[i]!=(OS_EVENT *)0)
		{
			sprintf(temp,"ChopStick %d create no error\n",i);
			Uart_Printf(temp);
		}
	}
    OSTaskCreate(StartTask,0,&StartTaskStk[TASK_STK_SIZE - 1],5);		
    OSStart();			
    return 0;
}

//*****************************StartTask********************************************
void  StartTask(void *pdata)
{
	char temp[50];
#if OS_CRITICAL_METHOD == 3
    OS_CPU_SR  cpu_sr;
#endif
	pdata=pdata;

	OSRunning=TRUE;          //使能多任务切换
	uHALr_InstallSystemTimer();

//  OSStatInit();

	for(i=0;i<5;i++)
	{
		err=OSTaskCreate(Philos,(void *)&PhilosID[i],&PhilosStk[i][TASK_STK_SIZE - 1],i+6);
		if(err==OS_NO_ERR)
			//test if task is created successfully
		{
			sprintf(temp,"Philosopher %d create no error %d\n",PhilosID[i],err);
			Uart_Printf(temp);
		}

	}

	OSTaskSuspend(OS_PRIO_SELF);	
}
//*****************************Philos********************************************
//the Philosopher first has to pick up the chopstick on his left hand then right
void  Philos(void *pdata)
{
	INT8U PhID;
	char temp[50];

   	PhID = *(INT8U *)pdata; 

    for (;;) 
	{

		OSTimeDly(200);
		sprintf(temp,"Philos %d is hungry\n",PhID);
		Uart_Printf(temp);
		OSTimeDly(200);

		OSSemPend(ChopStick[(PhID-1)],0,&err);
		OSSemPend(ChopStick[(PhID%5)],0,&err);

		sprintf(temp,"Philos %d is eating\n",PhID);
		Uart_Printf(temp);
		OSTimeDly(200);

		sprintf(temp,"Philos %d is thinking\n",PhID);
		Uart_Printf(temp);
		OSSemPost(ChopStick[(PhID%5)]);
		OSSemPost(ChopStick[(PhID-1)]);

		OSTimeDly(200);


        }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -