软件平台:CCS5.5
硬件平台:TMS320C6670 EVM
背景:调试 BCP 协处理器使用了一对多的特性,即在 PKTDMA 的 TX 端配置了一个描述符,RX 端则配置了多个描述符,根据项目需求,需要将描述符的 buffer 地址配置到外部存储,即DDR3上面,这些配置都已经做好后,测试数据OK。
现象:描述符回收不成功。
问题:如何正确回收配置的这些描述符,以便下次使用?
分配描述符的实现代码如下(简略版本):
hFDQ = Qmss_queueOpen (Qmss_QueueType_GENERAL_PURPOSE_QUEUE, FDQId, &isAllocated);
ReturnQ = Qmss_getQueueNumber (hGlblFDQ);
Qmss_queueOpen (Qmss_QueueType_GENERAL_PURPOSE_QUEUE, hGlblFDQ, &isAllocated);
for (i = 0; i < numDesc; ++ i)
{
if ((pCppiDesc = Qmss_queuePop (hGlblFDQ)) == NULL)
{
break;
}
pCppiDesc = (Void*) (QMSS_DESC_PTR (pCppiDesc));
pDataBuffer = (uint8_t *) (dataBufferPool + buffSize*i); //外部 DDR3 地址
Cppi_setData (Cppi_DescType_HOST, pCppiDesc, pDataBuffer, buffSize);
Cppi_setOriginalBufInfo (Cppi_DescType_HOST, pCppiDesc, pDataBuffer, buffSize);
Cppi_setReturnQueue (Cppi_DescType_HOST, pCppiDesc, ReturnQ);
Cppi_setPacketLen (Cppi_DescType_HOST, pCppiDesc, buffSize);
Cppi_linkNextBD (Cppi_DescType_HOST, pCppiDesc, NULL);
Qmss_queuePushDescSize (hFDQ, pCppiDesc, 256);
}
那么相应的回收描述符的操作,是要把上述分配的每个描述符的 data buffer指向 NULL 就可以了吗?
请 TI 工程师不吝赐教,感谢。
Bear Melon:
buffer地址不是随机分配的情况下,如何回收描述符?求助。