DSK3.3.0.3,工程为IWR6843人员跟踪与计数,在运行过程中,可能会出现DSS向MSS发送数据报错,MAILBOX_ECHINUSE,查看定义显示改错为另外一个实例在使用邮箱通道,但是整个工程里面DSS向MSS只有发送点云数据,以及MSS向DSS收到点云后回复的消息。
怀疑是DSS或者MSS的Mailbox_readFlush函数执行失败,但是在MSS和DSS的读取函数后加了下面的判断,发现Mailbox_readFlush函数并没有出现问题,不知道为什么DSS向MSS发送点云数据的时候会报错MAILBOX_ECHINUSE。
flushReturntVal = Mailbox_readFlush (gMmwDssMCB.peerMailbox);
if(flushReturntVal != 0){
System_printf ("Error: Mailbox readFlush failed [Error code %d]\n", flushReturntVal);
DebugP_assert(0);
}
在Mailbox_write函数中报错MAILBOX_ECHINUSE,出现的判断如下:
if(gMailboxMCB.mssDssWriteChIDInUse == MAILBOX_UNUSED_CHANNEL_ID)
{
/* Mark that the TX mailbox is now in use*/
gMailboxMCB.mssDssWriteChIDInUse = driver->cfg.chId;
/* Release the critical section: */
HwiP_restore(key);
}
else
{
/* Error: TX mailbox is being used by another mailbox instance*/
DebugP_log2 ("MAILBOX: Mailbox_write Error! handle=(%p). Write attempt with TX box in use by channel ID %d\n",driver, gMailboxMCB.mssDssWriteChIDInUse);
retVal = MAILBOX_ECHINUSE;
/* Release the critical section: */
HwiP_restore(key);
goto exit;
}
难道是因为gMailboxMCB.mssDssWriteChIDInUse这个内存不小心被修改了吗?谢谢!