📄 queue.c
字号:
*********************************************************************************************************
*/
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 + -