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.

[参考译文] AWR2944EVM:高端角雷达演示中由 DPM_ioctl 导致的 MSS 和 DSS 之间的通信故障

Guru**** 2847400 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/1071712/awr2944evm-the-communication-failure-between-mss-and-dss-by-dpm_ioctl-in-the-high-end-corner-radar-demo

部件号:AWR2944EVM
“线程:测试”中讨论的其它部件

你(们)好

    在高端角雷达演示中,函数 DPM_ioctl 实现了一些 DPC 控件。在本演示中 ,sendResultsExportedCommand 函数将 DPM_ioctl 调用 为以下函数:

void sendResults 导出命令(DPM_Buffer *ptrResult){
   Int32_t 重定位;
   DPC_ObjectDetection_ExecuteResult *dpcResults;
   DPC_ObjectDetection_ExecuteResultExportInfo ExportInfo;
   UINT8_t temp[8];
   UART_Transaction trans;
   UART 事务初始化(&TRANS );

   /*验证 DPC 结果缓冲区*/
   DebugP_Assert (ptrResult->size[0]== sizeof(DPC_ObjectDetection_ExecuteResult));

   /*翻译地址:*/
   dpcResults =(DPC_ObjectDetection_ExecuteResult *) AddrTranslateP_getLocalAddr ((UINT32_t) ptResult->ptBuffer[0]);

       /*********************************************************
    *处理结果后向数据路径发送通知
    (一 /
   /*表示结果消耗和帧/子帧处理结束*/
  
   exportInfo.subFrameIdx = dpcResults -> subFrameIdx;
   RetVal = DPM_ioctl (gMmwMssMCB.objDetDpmHandle,
                         DPC_OBJDET_IOCTL__DYNAMIC_EXECUTE_result_exported,
                       导出信息(&EX),
                       sizeof (DPC_ObjectDetection_ExecuteResultExportedInfo);
   Commandtime=(CycleCounterP_getCount32()-Commandtime)/300;
   
   如果(RetVal < 0)为{
       test_print ("错误:DPM DPC_OBJDET_IOCTL__DYNAL_EXECT_result_exported 失败[错误代码%d]\n",
                   RetVal);
       MwDemo_debugAssert(0);
   }

}

在测试中,我执行了此问题,MSS 演示中的返回值 RetVal 为零,但 DPC_ObjectDetection_ioctl 不会接收 DSS 演示中的任何命令。也就是说,MSS 已成功发送了 DPM_ioctl 命令 ,但 DSS 演示不会接收任何数据。 这是什么原因?我该如何解决?

谢谢,

巴西

按比例

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,拉塔

    如果演示工作正常,则必须将此命令发送到 DSS。 我这样说是因为 否则,实验室将会失败断言声明并崩溃。

    在每个帧的开头调用 DPC_ObjectDetection_frameStart:
    static void DPC_ObjectDetection_frameStart (DPM_DPCHandle handle)
    {
        ...
        
        /* Check if previous frame (sub-frame) processing has completed */
        DPC_Objdet_Assert(objDetObj->dpmHandle, (objDetObj->interSubFrameProcToken == 0));
        objDetObj->interSubFrameProcToken++;
    
        ...
    }
    您可以看到 objDetObj->interSubFrameProcess 令牌必须为零。 objDetObj->interSubFrameProcess 令牌稍后在同一个函数中也设置为1。
    当 DSS 接收 到 DPC_OBJDET_IOCTL__DYNAL_EXECT_result_Exported 命令时,objDetObj->InterSubFrameProcess 令牌被设置回0。 您可以在 datapath/DPC/objectdetection/objdethwaDDMA/objectdetection.c 文件中看到此信息:
    else if (cmd == DPC_OBJDET_IOCTL__DYNAMIC_EXECUTE_RESULT_EXPORTED)
        {
            ...
    
            /* mark end of processing of the frame/sub-frame by the DPC and the app */
            objDetObj->interSubFrameProcToken--;
        }
    DSS 还会在收到下一帧的 rangeproc DPU 时触发该命令, 这对实验室的工作也很重要。
     
    我是否可以建议在这种情况下放置一个全局易失性计数器,以确认您确实在 DSS 一侧为每个帧获得了一次此命令?
    此致,
    阿亚伊什
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Aayush

      谢谢你的回复。我知道你说了些什么,我 这样做了:

       首先,我在  MSS 和 DSS 演示中更改了 DPC_ObjectDetection_ExecuteResultExportdInfo 定义:

    typedef 结构 DPC_ObjectDetection_ExecuteResultExportedInfo_t

       /*! @简短     子帧索引,范围为[0..numSubFrames -1]。
        *             这是其结果已导出的子框架。
        *             尽管此 DPC 实施知道出口时的子框架是什么
        *             在子帧中应按顺序排列,此字段很有帮助
        例如             ,在错误检查中,应用程序可能会丢失
        *             及时导出/消耗子框架或有问题
        *             出口/消费。 *
       UINT32_t       framecount;
       UINT8_t        子框架标识;
    } DPC_ObjectDetection_ExecuteResultExportedInfo;

    值 framecount 被添加为 帧计数器。  

    其次,在 sendResultsExportedCommand framecount 增加一个后发送到 DSS (我们可以通过 printf 看到 framecount 值)中,framecount 通过 UART 发送到计算机:

     void sendResults 导出命令(DPM_Buffer *ptrResult){
        (笑声)
       framecount++;
       exportInfo.subFrameIdx = dpcResults -> subFrameIdx;
       exportInfo.framecount = framecount;
       RetVal = DPM_ioctl (gMmwMssMCB.objDetDpmHandle,
                           DPC_OBJDET_IOCTL__DYNAMIC_EXECUTE_result_exported,
                           导出信息(&EX),
                           sizeof (DPC_ObjectDetection_ExecuteResultExportedInfo);
       Commandtime=(CycleCounterP_getCount32()-Commandtime)/300;
       temp[0]= 0x55;
       temp[1]=(uint8_t)(framecount>>24);
       temp[2]=(uint8_t)(framecount>>16);
       temp[3]=(uint8_t)(framecount>>8);
       temp[4]=(uint8_t)(framecount>>0);
       temp[5]=(uint8_t)(framecount>>>>0);
       TRANS.buf  =(uint8_t*)温度;
       事务数=6;
       UART 写入(gMmwMssMCB.commandUartHandle,&trans);

       如果(RetVal < 0)为{
           test_print ("错误:DPM DPC_OBJDET_IOCTL__DYNAL_EXECT_result_exported 失败[错误代码%d]\n",
                       RetVal);
           MwDemo_debugAssert(0);
       }
    }

    静态空 DPC_ObjectDetection_frameStart (DPM_DPCHandle 句柄)

      (笑声)
       if(objDetObj->interSubFrameProcess Token!=0){
           printf("chain crashed:%d\n",framecount);
           DPC_Objdet_Assert (objDetObj->dpmHandle,0);
       }
      (笑声)
    }

    第三,当演示失败时,我会在 MSS 演示中看到,如果 framecount 为 n,而在 DSS 演示中,framecount 为 n-1。也就是说,MSS 成功地将命令发送给 DSS (返回的 RetVal 为零), 但 DSS 尚未收到命令。  看起来 DPM 失败了。  你能就此提出什么建议吗?

    巴西

    按比例

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,拉塔

    将计数器放在 DSS 端的最佳位置是  DPC_ObjectDetection_ioctl ,它位于:

    else if (cmd == DPC_OBJDET_IOCTL__DYNAMIC_EXECUTE_RESULT_EXPORTED)
        {
            ...
    
            /* mark end of processing of the frame/sub-frame by the DPC and the app */
            objDetObj->interSubFrameProcToken--;
        }

    是否可以在此处放置计数器以确保接收到所有 DPM 命令?

    此致,

    阿亚伊什

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好,Aayush,

      我之所以喜欢这样做,是因为我想确认 DSS 是否已收到发送数据。 如果我把柜台放在你所说的位置,我就不知道 MSS 发出命令的次数。

       我想知道 DPM 是否失败,我该如何解决此问题?

    巴西

    按比例

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,拉塔

    我建议添加计数器的位置将由 DPM 命令直接调用,因为它是 DPC_ObjectDetection_ioctl 函数的一部分,该函数配置为由 DPM 调用以处理所有 DPM_ioctl 命令。

    我想知道这里是否有一些不正确的沟通?

    此致,

    阿亚伊什

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Aayush,

          在高角雷达演示,我将帧周期更改为100ms,默认时间为250。  这是 MSS 和 DSS 之间的通信中断的问题吗? 沟通时间(毫秒或我们的时间)有多长?

    巴西

    按比例

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,拉塔

    实验室确实需要250ms 才能运行。 这适用于真实驾驶场景。 如果在室内测试,帧时间可能会显著缩短。  如果 DSS 未对 DPC_ObjectDetection_frameStart 中的声明失败,则表示配置的帧时间已足够。 如果此断言失败,则表明配置的帧时间不足以进行处理(在 MSS 或 DSS 方面)。

    此致,

    Aayus

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Aayus,您好:

       缩短 帧周期的方法是减少范围纸槽数或多普勒纸槽数。 如果 我将范围容器更改为256 (默认值为384),DSS 上的期间将会缩短。但看起来 DSS 总是会使声明失败。 通常,选择范围和多普勒箱后,DSS 的处理时间几乎没有变化。 最耗时的部分是 MSS,对吗?

     巴西,

    按比例

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,拉塔

    在 高端角雷达演示中,还存在一些对所看到的点和目标数量的依赖。

    此致,

    阿亚伊什

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Aayush,

       是的,你是对的。 现在我在这种情况下遇到了这个问题:我将标签0015_high _end_corner_radar 分为两部分:DSS 和 MSS 项目。 然后精心构建这两个项目,然后调试演示,将出现故障。 如果我在引用中提供的 CMD 命令中对演示进行了 bulid,那么即使将帧周期设置为80ms,也不会生成故障。也许当我分离演示时,可能存在一些我尚未考虑的情况,这会导致此故障。

    巴西

    按比例

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,拉塔

    是的,如果 MSS 没有运行,DPC_OBJDET_IOCTL__DYNAL_EXECT_result_exported 将不会被发送到 DSS,从而导致下一帧启动回调时断言失败。

    此致,

    阿亚伊什