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

📄 queue.c

📁 ucosii小实验任务4 消息队列
💻 C
📖 第 1 页 / 共 2 页
字号:
*********************************************************************************************************
*/

void  Taskq1 (void *pdata)
{
    INT8U  err;
    INT8U  id;
	  char   s[30];
	void   *mg;

	id=*(int *)pdata;

    for (;;) {
		OSTimeDlyHMSM(0, 0, 2, 0);           /* Wait 2 second                          */
		mg=OSQPend(q1,0,&err);				 /* apply for message                      */
		switch(err){
				case OS_NO_ERR:{
					sprintf(s, "task %3d has got the %s",id,(char *)mg);
					PC_DispStr(15, 8+id, s, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
					OSTimeDlyHMSM(0, 0, 0, 200*(4-id));
					break;
				}                            /* If it is normally, just print the string.*/
				default :{
					sprintf(s, "queue1 %3d  is empty.          ",id);
					PC_DispStr(15, 8+id, s, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
					OSTimeDlyHMSM(0, 0, 0, 200*(4-id));
					break;
				}							 /* If the queue is empty or has been deleted, print another string.*/
		}
		sprintf(s, "                               ");
		PC_DispStr(15, 8+id, s, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);

	 }
}




/*
*********************************************************************************************************
*                                                  TASKq2
*********************************************************************************************************
*/

void  Taskq2 (void *pdata)
{
	
	INT8U  err;
	INT8U  id;
	char   s[30];
	void   *mg;

	id=*(int *)pdata;

    for (;;) {
		
		OSTimeDlyHMSM(0, 0, 2, 0);         /* Wait 2 second                */                    
		mg=OSQPend(q2,0,&err);             /* apply for message            */
		switch(err){
				case OS_NO_ERR:{
					sprintf(s, "task %3d has got the %s.", id+3, (char *)mg);
					PC_DispStr(15, 11+id, s, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
					OSTimeDlyHMSM(0, 0, 0, 200*(4-id));
					break;
				}						    /* If it is normally, just print the string.*/
				default :{
					sprintf(s, "queue2 %3d  is empty.       ",id+3);
					PC_DispStr(15, 11+id, s, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
					OSTimeDlyHMSM(0, 0, 0, 200*(4-id));
					break;
				}                           /* If the queue is empty or has been deleted, print another string.*/
		}                    
		sprintf(s, "                               ");
		PC_DispStr(15, 11+id, s, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
	 }

}

/*
*********************************************************************************************************
*                                                  TASKcon
*********************************************************************************************************
*/

void  TaskCon (void *pdata)
{
	INT8U  i,j;
	INT8U  err;
	INT8U  note=1;                   /* for flush the queue                  */
	INT16U  del=10;					   /* for delete the queue                 */
	OS_EVENT *q;
	char   ch[50];
	OS_Q_DATA *data;
	static char *s[]={                 /* queue1's message                      */
		"message0","message1","message2","message3","message4","message5"
	};

	static char *t[]={				   /* queue2's message                      */
		"messageA","messageB","messageC","messageD","messageE","messageF"
	};

	pdata=pdata;

    for (;;) {                          

		for( i = 0 ; i < 6 ; i++ ){
			err = OSQPostFront(q1,(void*)s[i]);          /* post message to q1 LIFO                     */
			switch(err){
				case OS_NO_ERR:{
					sprintf(ch, "the queue1 %5d add %s",i,s[i]);
					PC_DispStr(15, 14, ch, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
					OSTimeDlyHMSM(0, 0, 0, 150);
					break;
				}
				case OS_Q_FULL:{
					sprintf(ch, "the queue2 is full ,don't add. ");
					PC_DispStr(15, 14, ch, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
					OSTimeDlyHMSM(0, 0, 0, 150);
					break;
				}
				default :break;
			}
			sprintf(ch, "                                                 ");
			PC_DispStr(15, 14, ch, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
		}

		for( j = 0 ; j < 6 ; j++ ){
			err = OSQPost(q2,(void*)t[j]);			     /* post message to q2 FIFO                     */
			switch(err){
				case OS_NO_ERR:{
					sprintf(ch, "the queue2 %5d add %s",j,t[j]);
					PC_DispStr(15, 14, ch, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
					OSTimeDlyHMSM(0, 0, 0, 150);
					break;
				}
				case OS_Q_FULL:{
					sprintf(ch, "the queue2 is full,don't add. ");
					PC_DispStr(15, 14, ch, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
					OSTimeDlyHMSM(0, 0, 0, 150);
					break;
				}
				default :break;
			}
			sprintf(ch, "                                                    ");
			PC_DispStr(15, 14, ch, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
		}
		
		if(note==1)
		{
			OSQFlush(q2);                                /* clear up the queue 2.                        */
			note=0;
		}
		else
			note=1;
		
		err=OSQQuery(q2,data);                           /* get the information about q2                 */
		if(err==OS_NO_ERR){
			sprintf(ch,"the queue2'information::NextMsg:%s,NumMsg:%d,QSize:%d.",(char *)data->OSMsg,data->OSNMsgs,data->OSQSize);
			PC_DispStr(15, 15, ch, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
		}                                                /* print the information about q2               */
		OSTimeDlyHMSM(0, 0, 0, 500);                     /* Wait 500 minisecond                          */
		sprintf(ch, "                                                           ");
		PC_DispStr(15, 15, ch, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);

		if(del==0)
		{
			q=OSQDel(q2,OS_DEL_ALWAYS,&err);             /* delete the  q2                               */
			if(q==(OS_EVENT *)0)
			{
				sprintf(ch, "already successful delete queue2         ");
				PC_DispStr(15, 16, ch, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
			}
		}
		else
		{
			del--;
			sprintf(ch, "not successful delete queue2");
			PC_DispStr(15, 16, ch, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
		}	
		
	}
}

⌨️ 快捷键说明

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