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

📄 test.c

📁 是本人做的一些关于UCOS的课程设计
💻 C
📖 第 1 页 / 共 2 页
字号:
        case 2:
             PC_DispStr(71, 22, "80287 FPU", DISP_FGND_YELLOW + DISP_BGND_BLUE);
             break;

        case 3:
             PC_DispStr(71, 22, "80387 FPU", DISP_FGND_YELLOW + DISP_BGND_BLUE);
             break;
    }
}


static  void  TaskStartCreateTasks (void)
{
	  OSTaskCreateExt(TaskClk,
                   (void *)0,
                   &TaskClkStk[TASK_STK_SIZE - 1],
                   TASK_CLK_PRIO,
                   TASK_CLK_ID,
                   &TaskClkStk[0],
                   TASK_STK_SIZE,
                   (void *)0,
                   OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);

   
    OSTaskCreateExt(producer1,
                   (void *)0,
                   &pro1Stk[TASK_STK_SIZE - 1],
                   pro_1_PRIO,
                   pro_1_ID,
                   &pro1Stk[0],
                   TASK_STK_SIZE,
                   (void *)0,
                   OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);

   OSTaskCreateExt(consumer1,
                   (void *)0,
                   &con1Stk[TASK_STK_SIZE - 1],
                   con_1_PRIO,
                   con_1_ID,
                   &con1Stk[0],
                   TASK_STK_SIZE,
                   (void *)0,
                   OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);

	OSTaskCreateExt(messagesend,
                   (void *)0,
                   &mes1Stk[TASK_STK_SIZE-1],
                   mes_1_PRIO,
                   mes_1_ID,
                   &mes1Stk[0],
                   TASK_STK_SIZE,
                   (void *)0,
                   OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
      
    OSTaskCreateExt(messageget,
                   (void *)0,
                   &mes2Stk[TASK_STK_SIZE-1],
                   mes_2_PRIO,
                   mes_2_ID,
                   &mes2Stk[0],
                   TASK_STK_SIZE,
                   (void *)0,
                   OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
	
	OSTaskCreateExt(mutex1,
                   (void *)0,
                   &mutex1Stk[TASK_STK_SIZE-1],
                   mutex_1_PRIO,
                   mutex_1_ID,
                   &mutex1Stk[0],
                   TASK_STK_SIZE,
                   (void *)0,
                   OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
	  
	OSTaskCreateExt(mutex2,
                   (void *)0,
                   &mutex2Stk[TASK_STK_SIZE-1],
                   mutex_2_PRIO,
                   mutex_2_ID,
                   &mutex2Stk[0],
                   TASK_STK_SIZE,
                   (void *)0,
                   OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
				   
}


void  messagesend(void *data)
{ 
   char   txmsg;
    INT8U  err,bz;
    bz=14;
	
    data  = data;
    txmsg = 'A';
    for (;;) {
        PC_DispChar(sz++, 19, txmsg, DISP_FGND_YELLOW + DISP_BGND_BLUE); 
        PC_DispChar(bz++, 19, ' ', DISP_BGND_LIGHT_GRAY);//DISP_BGND_LIGHT_GRAY  DISP_FGND_YELLOW + DISP_BGND_BLUE
	OSTimeDly(30);
	OSMboxPost(TxMbox, (void *)&txmsg);      /* Send message to Task #5                            */
        OSMboxPend(AckMbox, 0, &err);            /* Wait for acknowledgement from Task #5              */
        txmsg++;                                 /* Next message to send                               */
         
	if (txmsg == 'Z')
		 {
      txmsg = 'A';                         /* Start new series of messages                       */
     }
      if(sz==50)  
  		{
  			sz=18;
  			}
  			if(bz==50)  
  		{
  			bz=14;
  			}
    }
}


void  messageget (void *data)
{
   char  *rxmsg;
    INT8U  err,bz;
    bz=13;

    data = data;
    for (;;) {
        rxmsg = (char *)OSMboxPend(TxMbox, 0, &err);                  /* Wait for message from Task #4 */
        PC_DispChar(gz++, 20, *rxmsg, DISP_FGND_YELLOW + DISP_BGND_BLUE);
        PC_DispChar(bz++, 20,' ', DISP_BGND_LIGHT_GRAY);
       OSTimeDly(30);
        OSMboxPost(AckMbox, (void *)1);                               /* Acknowledge reception of msg  */
    if(gz==49)  
  		{
  			gz=17;
  		}
  		if(bz==49)  
  		{
  			bz=13;
  		}
    }
}


void  TaskClk (void *data)
{
    char s[40];


    data = data;
    for (;;) {
        PC_GetDateTime(s);
        PC_DispStr(60, 23, s, DISP_FGND_YELLOW + DISP_BGND_BLUE);
        OSTimeDly(OS_TICKS_PER_SEC);
    }
}


void producer1(void *pdata)
{
      INT8U  err;
      pdata = pdata;

 	for(;;)
           {

       OSSemPend(empty,0,&err);
		   data_p=65+random(10);
		   y=y+1;
		   PC_DispChar(y, 12,data_p, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
		   if(y==27)
		   {
			   y=17;
		   }
		       OSSemPend(mutex,0,&err);
               buffer[p]=data_p;
               p=(p+1)%10;
			   OSSemPost(mutex);			          
			   OSSemPost(full);
			  OSTaskChangePrio(pro_1_PRIO,12+random(12));
			                 
			   OSTimeDly(600);	  
	   }
}

void consumer1(void *pdata)
{     
	INT8U  err;

	pdata = pdata;
	
	for(;;)
	   {  
       OSTimeDly(100);
		OSSemPend(full,0,&err); 
		OSSemPend(cons,0,&err);
		data_c=buffer[q];
		q=(q+1)%10;
		OSSemPost(cons);			
		z=z+1;

		PC_DispStr(z, 12,"-", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);

		PC_DispChar(z, 15, data_c, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
		if(z==27)
		{
			z=17;
		}
		OSSemPost(empty);
		OSTaskChangePrio(con_1_PRIO,12+random(12));
		OSTimeDly(600);		
	   }
}

void mutex1(void *pdata)
{
   INT8U  err;
   pdata = pdata;
   for(;;)
   {   
	   OSSemPend(mut,0,&err);
		   PC_DispStr(17, 8,"Task1 is running", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
		   PC_DispStr(17, 9,"Task2 is waiting", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
		   
	   OSSemPost(mut);
	   OSTimeDly(100);
   }
}
void mutex2(void *pdata)
{
   INT8U  err;
   pdata = pdata;
   for(;;)
   {
	   OSSemPend(mut,0,&err);
		   PC_DispStr(17, 8,"Task1 is waiting", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
		   PC_DispStr(17, 9,"Task2 is running", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); 
	   OSSemPost(mut);
	   OSTimeDly(200);
   }
}

⌨️ 快捷键说明

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