📄 test.c
字号:
#include "includes.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};
INT16S key; //用于退出uCOS_II的键
INT8U err;
INT8U x=0,y=0,z=0; //字符显示位置
INT8U i=0;
OS_EVENT *ChopStick[5];
void StartTask(void *data);
void Philos(void *data);
void Quitkey(void);
void DispCtrl(void);
/************************主函数*********************************************/
void main (void)
{
char temp[50];
OSInit(); //初始化uCOS_II
PC_DOSSaveReturn(); //保存Dos环境
PC_VectSet(uCOS, OSCtxSw); //安装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",i);
PC_DispStr(40,20+i,temp,DISP_BGND_BLACK+DISP_FGND_YELLOW);
}
}
OSTaskCreate(StartTask,0,&StartTaskStk[TASK_STK_SIZE - 1],5);
OSStart();
}
//*****************************StartTask********************************************
void StartTask(void *pdata)
{
char temp[50];
pdata=pdata;
OS_ENTER_CRITICAL();
PC_VectSet(0x08, OSTickISR);
PC_SetTickRate(OS_TICKS_PER_SEC);
OS_EXIT_CRITICAL();
// 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",PhilosID[i],err);
PC_DispStr(0,20+i,temp,DISP_BGND_BLACK+DISP_FGND_YELLOW);
}
}
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",PhID);
PC_DispStr(x,y++,temp,DISP_BGND_BLACK+DISP_FGND_WHITE);
OSTimeDly(200);
OSSemPend(ChopStick[(PhID-1)],0,&err);
OSSemPend(ChopStick[(PhID%5)],0,&err);
sprintf(temp,"Philos %d is eating",PhID);
PC_DispStr(x,y++,temp,DISP_BGND_BLACK+DISP_FGND_WHITE);
OSTimeDly(200);
sprintf(temp,"Philos %d is thinking",PhID);
PC_DispStr(x,y++,temp,DISP_BGND_BLACK+DISP_FGND_WHITE);
OSSemPost(ChopStick[(PhID%5)]);
OSSemPost(ChopStick[(PhID-1)]);
OSTimeDly(200);
Quitkey();
}
}
//*****************************Quitkey()********************************************
void Quitkey(void)
{
if(PC_GetKey(&key)==TRUE)
{
if(key==0x1B)
{PC_DOSReturn();}
}
}
//******************************DispCtrl()********************************************
/*void DispCtrl()
{
if(y==26)
{
y=0;
if(x==0) x=22;
if(x==22) x=42;
if(x==42) x=0;
}
}
//5 0 4
//1 1 0
//2 2 1
//3 3 2
//4 4 3
//5 0 4*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -