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

📄 test.c

📁 是本人做的一些关于UCOS的课程设计
💻 C
📖 第 1 页 / 共 2 页
字号:
             break;

        case 1:
             PC_DispStr(71, 22, " 8087 FPU", DISP_FGND_YELLOW + DISP_BGND_BLUE);
             break;

        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;
    }
}

/*$PAGE*/
/*
*********************************************************************************************************
*                                             CREATE TASKS
*********************************************************************************************************
*/

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(producer,
                   (void *)0,
                   &Task2Stk[TASK_STK_SIZE - 1],
                   TASK_3_PRIO,
                   TASK_2_ID,
                   &Task2Stk[0],
                   TASK_STK_SIZE,
                   (void *)0,
                   OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);

   OSTaskCreateExt(consumer,
                   (void *)0,
                   &Task3Stk[TASK_STK_SIZE - 1],
                   TASK_2_PRIO,
                   TASK_3_ID,
                   &Task3Stk[0],
                   TASK_STK_SIZE,
                   (void *)0,
                   OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);

    OSTaskCreateExt(messagesend,
                   (void *)0,
                   &Task4Stk[TASK_STK_SIZE-1],
                   TASK_4_PRIO,
                   TASK_4_ID,
                   &Task4Stk[0],
                   TASK_STK_SIZE,
                   (void *)0,
                   OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);

    OSTaskCreateExt(messageget,
                   (void *)0,
                   &Task5Stk[TASK_STK_SIZE-1],
                   TASK_5_PRIO,
                   TASK_5_ID,
                   &Task5Stk[0],
                   TASK_STK_SIZE,
                   (void *)0,
                   OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
}

/*$PAGE*/
/*
*********************************************************************************************************
*                                               TASK #1
*
* Description: This task executes every 100 mS and measures the time it task to perform stack checking
*              for each of the 5 application tasks.  Also, this task displays the statistics related to
*              each task's stack usage.
*********************************************************************************************************
*/



/*
*********************************************************************************************************
*                                               TASK #4
*
* Description: This task sends a message to Task #5.  The message consist of a character that needs to
*              be displayed by Task #5.  This task then waits for an acknowledgement from Task #5
*              indicating that the message has been displayed.
*********************************************************************************************************
*/

void  messagesend(void *data)
{
    char   txmsg;
    INT8U  err;


    data  = data;
    txmsg = 'A';
    for (;;) {
        PC_DispChar(18, 16, txmsg, DISP_FGND_YELLOW + DISP_BGND_BLUE);
	OSTimeDlyHMSM(0, 0, 1, 0);
	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                       */
        }
    }
}
/*$PAGE*/
/*
*********************************************************************************************************
*                                               TASK #5
*
* Description: This task displays messages sent by Task #4.  When the message is displayed, Task #5
*              acknowledges Task #4.
*********************************************************************************************************
*/

void  messageget (void *data)
{
    char  *rxmsg;
    INT8U  err;


    data = data;
    for (;;) {
        rxmsg = (char *)OSMboxPend(TxMbox, 0, &err);                  /* Wait for message from Task #4 */
        PC_DispChar(18, 17, *rxmsg, DISP_FGND_YELLOW + DISP_BGND_BLUE);
        OSTimeDlyHMSM(0, 0, 1, 0);                                    /* 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 producer(void *pdata)
{
      INT8U  err;
      pdata = pdata;
      p=0;
	  y=17;
	
 	for(;;)
           {
		    
           OSSemPend(empty,0,&err);
		   data_p=65+random(27);
		   y=y+1;
		   PC_DispChar(y, 14,data_p, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
		   if(y==37)
		   {
			   y=17;
		   }
		   

		       OSSemPend(mutex,0,&err);
               buffer[p]=data_p;
               p=(p+1)%10;
			   OSSemPost(mutex);
			   
	       
			   OSSemPost(full);
               OSTimeDly(100);
			  
	   }
}

void consumer(void *pdata)
{     
	INT8U  err;
	q=0;
	pdata = pdata;
	z=17;
	
	for(;;)
	   {
	    if(full->OSEventCnt==0)
		{
			PC_DispStr(47, 15, "consmer is waiting!", DISP_FGND_YELLOW + DISP_BGND_BLUE);
			z=z+1;
		}
		OSSemPend(full,0,&err);     
		OSSemPend(mutex,0,&err);
		data_c=buffer[q];
		q=(q+1)%10;
		OSSemPost(mutex);			
		z=z+1;
        PC_DispChar(z, 15, data_c, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
		if(z==37)
		{
			z=17;
		}
		
		OSSemPost(empty);
	
		
		OSTimeDly(150);
	   }
}


/*===================================================*/

⌨️ 快捷键说明

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