This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
Hi wayne,
从现象上看,是申请硬件队列失败,相关驱动函数为Qmss_internalQueueOpen(), 建议对照这个函数的源码查一下对应的队列变量设置是否合理:
static Qmss_QueueHnd Qmss_internalQueueOpen (Qmss_QueueType queType, int queNum, uint8_t *isAllocated)
{
uint32_t index, startQueue, endQueue;
*isAllocated = 0;
if (queNum >= 0)
{
/* Invalidate queueFree Object */
Qmss_osalBeginMemAccess ((void *) &queueFree[queNum], 128);
queueFree[queNum]++;
/* Writeback queueFree Object */
Qmss_osalEndMemAccess ((void *) &queueFree[queNum], 128);
*isAllocated = queueFree[queNum];
return (Qmss_QueueHnd) queNum;
}
/* Get the range to allocate from */
startQueue = qmssLObj.maxQueueNum[queType].startIndex;
endQueue = qmssLObj.maxQueueNum[queType].startIndex + qmssLObj.maxQueueNum[queType].maxNum;
/* Invalidate queueFree Object */
Qmss_osalBeginMemAccess ((void *) &queueFree[startQueue], qmssLObj.maxQueueNum[queType].maxNum);
for (index = startQueue; index < endQueue; index++)
{
if (queueFree[index] == 0)
{
queueFree[index]++;
/* Writeback queueFree Object */
Qmss_osalEndMemAccess ((void *) &queueFree[index], 128);
*isAllocated = queueFree[index];
return (Qmss_QueueHnd) index;
}
}
return (Qmss_QueueHnd) -1;
}