改了一下午的程序结果发现错误竟然是队列在push时,last所指的位置其实是空的,即有数据的位置的下一位,所以在push时,如果要取node[bufIndex]的数据,应该在last++前取,如下所示,否则会出现偏差,甚至bug。
int32_t dbg_queue_push(ds_dbg_queue_t *pQueue, uint32_t bufIndex)
{
uint32_t last = pQueue->last;
last++;
last %= ARRAY_LEN(pQueue->node);
if (last == pQueue->head)
{
return DS_ERROR;
}
pQueue->node[pQueue->last] = bufIndex;
pQueue->last = last;
return DS_OK;
}