请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
部件号:CC2650EM-7ID-RD 在“线程:CC2650”中讨论的其它部件
我已将CC2650设置为ZNP,但从主机收到大约~200个异步请求后,它在 iCall_primAllocMsg()处失败,并返回 ICALL_errno_resource。
我已将来自主机的传入Rx事件应用程序回叫功能注册为Intercept
NPITASK_registerIncomingRXEventAppCB (SensorTagApp_NPITASK_RxCB,intercept);
在 SensorTagApp_NPITASK_RxCB(uint8_t *pMsg)内,释放NPI消息框。
内部
void SensorTagApp_NPITASK_RxCB(uint8_t *pMsg)
{
uint8_t *pStartRxMsg;
pStartRxMsg = pMsg;
uint8_t datalen =*pMsg++; //LEN
uint8_t cmd0 =*pMsg++; ///
正在处理中的逻辑mes1+
......
......
*/
//结尾处释放npI_frame msg
iCall_freeMsg(pStartRxMsg);
}
现在,在 Components/NPI/NPI_TASK_c中的NPITASK_processRXQ()中 ,它提到不释放NPI Msg容器,因为它将在堆栈中完成,但由于我正在截取RX事件到应用程序而不是重定向到堆栈,因此不应该 释放recPtr->npiMsg。 这是否导致内存泄漏?
//------------------
//! \brief 在RX队列中显示下一条消息并进行处理。
//!
//! 返回 void //--------------------------------------------
静态void NPITASK_processRXQ (void)
{
NPI_QueueRec *recPtr = NULL;
recPtr = Queue_dequeue (npiRxQueue);
IF (recPtr !=空)
{
IF (incomingRXEventAppCBFunc !=空)
{
交换机(incomingRXRtraceroute)
{
案例回显:
{
//发送到堆栈,并将副本发送到应用程序
NPITASK_sendBufToStack(npiAppEntityID, recPtr->npiMsg);
incomingRXEventAppCBFunc(recPtr->npiMsg->pBuf);
中断;
}
案例截取:
{
//仅向应用程序发送副本
incomingRXEventAppCBFunc(recPtr->npiMsg->pBuf);
中断;
}
无案例:
{
NPITASK_sendBufToStack(npiAppEntityID, recPtr->npiMsg);
中断;
}
}
}
否则
{
//发送到堆栈,并将副本发送到应用程序
NPITASK_sendBufToStack(npiAppEntityID, recPtr->npiMsg);
}
//释放队列记录
iCall_Free (recPtr);
//不要释放引用的npiMsg容器。 这将在堆栈任务中释放。
}
}