📄 umain.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 + -