调试的代码片段如下,程序运行到代码片段(1)时,xMB_GetData(&data)的返回值为QUEUE_FALSE;后经过分析,xMBRxSQ队列的信号量没有初始化。增加“xMBRxSQ.sem_usart = OSSemCreate(0);”后可以顺利出列。
(1)
if(xMB_GetData(&data) == QUEUE_SUCCESS)
{
...
}
(2)xMB_GetData的原型
QueueState xMB_GetData(uint8_t *pdata)
{
QueueState st;
st = Queue_Out(&xMBRxSQ, pdata, 1);
return st;
}
(3)Queue_Out的原型
QueueState Queue_Out(Queue *q,unsigned char* outdata,unsigned int timeout)
{
INT8U err;
OSSemPend(q->sem_usart,timeout,&err);
if(err!=OS_ERR_NONE)
{
*outdata=0;
return QUEUE_FALSE;
}
else
{
if(Queue_Empty(q)==QUEUE_FALSE)
return QUEUE_FALSE;
else
{
*outdata=q->data[q->rear];
q->rear=(q -> rear + 1) % QUEUE_SIZE;
q->entries--;
return QUEUE_SUCCESS;
}
}
}