學習UC/OS札記(-)信號量的使用

 #include  "includes.h"
#define   TASK_STK_SIZE  512
char*s1="MyTask";
char*s2="YouTask";
INT8U  err;
INT8U  y=0;
INT16S  key;
OS_EVENT *Fun_Semp;
OS_STK   StartTaskStk[TASK_STK_SIZE];
OS_STK   MyTaskStk[TASK_STK_SIZE];
OS_STK   YouTaskStk[TASK_STK_SIZE];
void   Fun(INT8U x,INT8U y);
void   StartTask(void *data);
void   MyTask(void *data);
void   YouTask(void *data);

/******************************main**************************************/
void  main(void)
{
  Fun_Semp = OSSemCreate(1);   //定義信號量
  OSInit();
  PC_DOSSaveReturn();
  PC_VectSet(uCOS,OSCtxSw);
  OSTaskCreate(StartTask,
     (void*)0,
     &StartTaskStk[TASK_STK_SIZE - 1],
     0);

  OSStart();
}


/**************************StartTask**************************************/
void  StartTask(void *pdata)
{
  #if OS_CRITICAL_METHOD ==3
    OS_CPU_SR  cpu_sr;
  #endif

  pdata = pdata;
  OS_ENTER_CRITICAL();
  PC_VectSet(0x08,OSTickISR);
  PC_SetTickRate(OS_TICKS_PER_SEC);
  OS_EXIT_CRITICAL();

  OSStatInit();
  OSTaskCreate(MyTask,
       (void*)0,
       &MyTaskStk[TASK_STK_SIZE-1],
       1);
  OSTaskCreate(YouTask,
       (void*)0,
       &YouTaskStk[TASK_STK_SIZE-1],
       2);
  for(;;)
  {
  if(PC_GetKey(&key) == TRUE)
  {
    if(key == 0x1b)
    {
    PC_DOSReturn();
    }
  }
  OSTimeDlyHMSM(0,0,3,0);
  }
}

/****************************MyTask*******************************************/
void MyTask(void *pdata)
{
  #if OS_CRITICAL_METHOD ==3
    OS_CPU_SR  cpu_sr;
  #endif
  pdata = pdata;


  for(;;)
  {
  OSSemPend(Fun_Semp,0,&err);
  PC_DispStr(0,++y,s1,DISP_BGND_BLACK+DISP_FGND_WHITE);
  Fun(7,y);                             //調用FUN()
  OSSemPost(Fun_Semp);
  OSTimeDlyHMSM(0,0,1,0);
  }
}

/*****************************YouTask*****************************************/
void  YouTask(void *pdata)
{
      #if OS_CRITICAL_METHOD ==3
    OS_CPU_SR  cpu_sr;
  #endif
  pdata = pdata;
  for(;;)
  {
    OSSemPend(Fun_Semp,0,&err);
    PC_DispStr(0,++y,s2,DISP_BGND_BLACK+DISP_FGND_WHITE);
    Fun(7,y);
    OSSemPost(Fun_Semp);
    OSTimeDlyHMSM(0,0,2,0);
  }
}

/*************************Fun*************************************************/
void   Fun(INT8U x,INT8U y)
{
  PC_DispStr(x,y,"diao yong Fun()",DISP_BGND_BLACK+DISP_FGND_WHITE);
}
/***********************************End***************************************/

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章