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

📄 test.c

📁 是本人做的一些关于UCOS的课程设计
💻 C
📖 第 1 页 / 共 2 页
字号:
                   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 (;;) {
		
		//txmsg = random(50);
		
		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;
      //p=0;
	  //y=17;
	
 	for(;;)
           {
		   temp1=12;
		   //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=65+random(10);
		   //data_p=65;
		   y=y+1;
		   //PC_DispChar(y, 11,data_p, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
		   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(1000);
		  
	   }

}



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(1000);
		  
	   }

}




void producer3(void *pdata)
{
      INT8U  err;
      pdata = pdata;
      
	  //y=17;
	
 	for(;;)
           {
			temp3=14;
		   //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=85+random(10);
		   //data_p=67;
		   y=y+1;
		   //PC_DispChar(y, 11,data_p, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
		   PC_DispChar(y, 14,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_3_PRIO,12+random(12));
               
			   OSTimeDly(1000);
		  
	   }

}


void consumer1(void *pdata)
{     
	INT8U  err;
	//z=17;
	//q=0;
	
	pdata = pdata;
	
	for(;;)
	   {
		
		//PC_DispChar(1, 1, 65+full->OSEventCnt, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
	    
       OSTimeDly(100);
		OSSemPend(full,0,&err); 
		
		//PC_DispChar(1, 2, 65+full->OSEventCnt, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
		
		OSSemPend(cons,0,&err);
		data_c=buffer[q];
		//PC_DispChar(z, 1, data_c, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
		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;
		}
		//PC_DispChar(1, 3, 65+empty->OSEventCnt, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
		OSSemPost(empty);
		//PC_DispChar(1, 4, 65+empty->OSEventCnt, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
		OSTaskChangePrio(con_1_PRIO,12+random(12));
		OSTimeDly(400);
			
	   }
}


void consumer2(void *pdata)
{     
	INT8U  err;
	
	
	
	pdata = pdata;
	
	for(;;)
	   {
		OSTimeDly(150);
		//PC_DispChar(1, 1, 65+full->OSEventCnt, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
	    
       
		OSSemPend(full,0,&err); 
		
		//PC_DispChar(1, 2, 65+full->OSEventCnt, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
		
		OSSemPend(mutex,0,&err);
		data_c=buffer[q];
		q=(q+1)%10;
		OSSemPost(mutex);			
		z=z+1;
		//OSTimeDly(334);
		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;
		}
		//PC_DispChar(1, 3, 65+empty->OSEventCnt, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
		OSSemPost(empty);
		OSTaskChangePrio(con_2_PRIO,12+random(12));
		//PC_DispChar(1, 4, 65+empty->OSEventCnt, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
		OSTimeDly(400);
		
	   }
}
/*===================================================*/


void mutex1(void *pdata)
{
   INT8U  err;
   pdata = pdata;
   for(;;)
   {
	   
	   //PC_DispChar(1, 3,65+mut->OSEventCnt, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
	   
	   OSSemPend(mut,0,&err);
	   
		   PC_DispStr(17, 8,"mutex1 is running", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
		   PC_DispStr(17, 9,"mutex2 is waiting", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
		   
	   OSSemPost(mut);
	   OSTimeDly(150);
   }
}

void mutex2(void *pdata)
{
   INT8U  err;
   pdata = pdata;
   for(;;)
   {
		
	   //PC_DispChar(1, 4,65+mut->OSEventCnt, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
	   
	   OSSemPend(mut,0,&err);
	       OSTimeDly(100);
		   PC_DispStr(17, 8,"mutex1 is waiting", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
		   PC_DispStr(17, 9,"mutex2 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 + -