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

📄 复件 test.c

📁 是本人做的一些关于UCOS的课程设计
💻 C
📖 第 1 页 / 共 2 页
字号:
                   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(producer2,
                   (void *)0,
                   &pro2Stk[TASK_STK_SIZE - 1],
                   pro_2_PRIO,
                   pro_2_ID,
                   &pro2Stk[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(consumer2,
                   (void *)0,
                   &con2Stk[TASK_STK_SIZE - 1],
                   con_2_PRIO,
                   con_2_ID,
                   &con2Stk[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);
				   
}

/*$PAGE*/
void  messagesend(void *data)
{ 
    INT8U  err;
    data  = data;
    
    for (;;) {	
		PC_DispChar(18, 19, txmsg, DISP_FGND_YELLOW + DISP_BGND_BLUE);
		OSMboxPost(TxMbox, (void *)&txmsg);  
		
		OSTimeDlyHMSM(0, 0, 1, 0);
        OSMboxPend(AckMbox, 0, &err);            
   }
}

/*$PAGE*/
void  messageget (void *data)
{
    char  *rx;
    INT8U  err;


    data = data;
    for (;;) {
        rx = (char *)OSMboxPend(TxMbox, 0, &err);                  /* Wait for message from Task #4 */
        OSTimeDlyHMSM(0, 0, 1, 0);
		PC_DispChar(18, 20, *rx, DISP_FGND_YELLOW + DISP_BGND_BLUE);
                                            /* Wait 1 second                 */
        OSMboxPost(AckMbox, (void *)1);                               /* Acknowledge reception of msg  */
    }
}
/*$PAGE*/
/*
*********************************************************************************************************
*                                               CLOCK TASK
*********************************************************************************************************
*/

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(;;)
           {
		   temp1=12;
       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 producer2(void *pdata)
{
      INT8U  err;
      pdata = pdata;
      
	  //y=17;
	
 	for(;;)
           {
			temp2=13;
		   //OSTimeDly(100);
		   //PC_DispChar(1, 5, 65+empty->OSEventCnt, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
           OSSemPend(empty,0,&err);
		   //PC_DispChar(1, 6, 65+empty->OSEventCnt, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
		   data_p=75+random(10);
		   //data_p=66;
		   y=y+1;
		   //PC_DispChar(y, 11,data_p, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
		   PC_DispChar(y, 13,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_2_PRIO,12+random(12));
               
			   OSTimeDly(500);
	   }

}

void consumer1(void *pdata)
{     
	INT8U  err;
	//z=17;
	//q=0;
	
	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;

		if(temp1==12)
		    PC_DispStr(z, 12,"-", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
	    if(temp2==13)
			PC_DispStr(z, 13,"-", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
        if(temp3==14)
			PC_DispStr(z, 14,"-", 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 consumer2(void *pdata)
{     
	INT8U  err;
	pdata = pdata;
	for(;;)
	   {
		OSTimeDly(150);
   
		OSSemPend(full,0,&err); 

		OSSemPend(mutex,0,&err);
		data_c=buffer[q];
		q=(q+1)%10;
		OSSemPost(mutex);			
		z=z+1;

		if(temp1==12)
		    PC_DispStr(z, 12,"-", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
	    if(temp2==13)
			PC_DispStr(z, 13,"-", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
        if(temp3==14)
			PC_DispStr(z, 14,"-", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
        
		PC_DispChar(z, 16, data_c, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);

		if(z==27)
		{
			z=17;
		}
		OSSemPost(empty);
		OSTaskChangePrio(con_2_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);
   }
}

void messinput(void)
{
  PC_DispStr(0,18 ,"input message  :", DISP_FGND_YELLOW + DISP_BGND_BLUE);
	gotoxy(19,19);
	scanf("%c",&txmsg);
}

⌨️ 快捷键说明

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