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:从共享 HSRAM 读取时 MSS 可能会失败

Guru**** 2555630 points
Other Parts Discussed in Thread: AWR2944EVM

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

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/1542621/awr2944evm-mss-fails-likely-on-reading-from-shared-hsram

器件型号:AWR2944EVM


工具/软件:

我将在 AWR2944EVM 的 DDM 演示中添加自定义处理功能。 最终要添加一个用于分类数据的 STFT(短时间 FFT)、但对于初学者、我在 objectdetection.c 中写入一个字节到存储器、并尝试通过 UART 将其传输到 PC。

正如我在调试器中观察到的那样、DPM 上传到 dss_main.c 并在调试模式下测试_printed。 但是、当我尝试在 mss_main.c 中读取这些数据时、将我的数据写入 dss_main.c 中的共享存储器后、会失败并出现以下错误(请注意 DSS 和 MSS 测试打印 83、这是我在 objectdetection.c 中写入存储器的内容 — 83 与 STFT 一样):

启动传感器(发出 MMWAVE_START)
[C66xx_DSP]调试:DSS = 0x53 (83) 上的 STFT PAYLOD[0]
[Cortex_R5_0]调试:MSS 上的 STFT PAYLOY[0]= 0x53 (83)
[C66xx_DSP]调试:DSS = 0x53 (83) 上的 STFT PAYLOD[0]
[Cortex_R5_0]调试:MSS 上的 STFT PAYLOY[0]= 0x53 (83)
UART 处理未完成:numObjOut 37 Time 207
断言:20.910911s:./mss/mss_main.c:MmwDemo_DPC_ObjectDetection_reportFxn:2738:0 失败!!!


第 2738 行是假时执行的 else 语句:gMwMssMCB.stats.isLastFrameDataProcessed 这向我表明消息同步或可能是我的数据读取存在问题、尽管有趣的是 MSS 和 DSS 都能正确地看到我的写入数据。

因此、我问自己以下问题、如果您能帮助我解决这些问题、那将会很好:

  1. 将 DPM 结果复制到共享 HSRAM 中的正确方法是什么?我在草图中缺少某些内容、如缓存无效等?
  2. 在 MSS 端读取这些数据的正确方法是什么?
  3. 我知道默认演示使用了 MmWDemo_HSRAM 结构中的有效载荷“对象“。 您建议使用什么方法将自定义数据传输到 MSS?

感谢所有帮助、

此致

标记

为了给您提供更多的上下文、我所做的修改如下所示:

  • 在 MSS 端、我添加的唯一修改是在 MmwDemo_transmitProcessedOutput 中、当对此进行注释后、演示会正常工作:

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////// STFT 数据转换////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
stftBusPtr = gMmwMssMCB.ptrResult.ptrBuffer[2];
if(stftBusPtr != NULL )

//stftSize = gMmwMssMCB.ptrResult.size[2];
stftLocalPtr =(uint8_t *) AddrTranslateP_getLocalAddr ((uint32_t) stftBusPtr);

//测试打印我们已阅读的内容并检查它是否为十六进制=0x53 和十进制=83
Uint8_t firstByte = stftLocalPtr[0];
test_print(“调试:mss 上的 STFT payload[0]= 0x%02x (%u)、长度=%u 字节\n“、firstByte、firstByte、tl[tlvIdx].length);
}
//////////////////////// 数据转换结束/////////////////

  • 在 DSS 方面、我添加了一个自定义函数并对 dpmTask 进行了修改:

静态 int32_t MmwDemo_copySTFTToHSRAM (MwDemo_HSRAM *ptrHsramBuffer、const void *buf、uint32_t numBytes)

uint8_t *ptrCurr;
uint32_t freeBytes;

if ((ptrHsramBuffer = NULL)||(buf = NULL))

返回–1;
}

// ptrCurr 是 HSRAM 中我们要写入的位置、
//有效载荷是 MmwDemo_HSRAM 结构中专为附加数据设计的未使用时隙
ptrCurr = ptrHsramBuffer->payload;
FreeBytes = MMWDEMO_HSRAM_PAYLOAD_SIZE;
if (numBytes > freeBytes)

返回–1;
}

//将 STFT 数据复制到有效载荷的起始位置[]
memcpy (ptrCurr、buf、numBytes);

//返回保留的字节数
返回 (int32_t)(freeBytes - numBytes);
}

生成任务


if ((RetVal = MmwDemo_copyResultToHSRAM (&gHSRAM、Result、&gMmwDssMCB.dataPathObj.subFrameStats[Result->subFrameIdx])>= 0)

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////// 将 STFT 结果写入共享的 HSRAM ///////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//将 STFT 结果复制到 HSRAM
retVal = MmwDemo_copySTFTToHSRAM (&gHSRAM、resultBuffer.ptrBuffer[2]、resultBuffer.size[2]);
gHSRAM.outStats.interFrameProcessingMargin -=((CycleCounterP_getCount32 ()- StartTime)/DSP_CLOCK_MHz);
If (RetVal < 0)

TEST_PRINT(“错误:STFT -> HSRAM 失败[错误:%d]\n“、RetVal);
MmwDemo_debugAssert (0);
}

uint8_t first =((uint8_t*) gHSRAM.PAYLOAD)[0];
test_print(“debug:DSS 上的 STFT payload[0]= 0x%02x (%u)\n“,第一个,第一个);

//将 DPM 插槽 2 重新分配到 HSRAM 中 STFT 有效载荷的新地址、
//大小与原来一样、因此不需要更新它(就像上面的原始代码一样)
resultBuffer.ptrBuffer[2]=(uint8_t *)&gHSRAM.PAYLOAD;

//修改结束:发送所有三个缓冲区、保持不变
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//更新 DPM 缓冲区
resultBuffer.ptrBuffer[0]=(uint8_t *)&gHSRAM.Result;
resultBuffer.ptrBuffer[1]=(uint8_t *)&gHSRAM.outStats;
resultBuffer.size[1]= sizeof (MmwDemo_output_message_stats);

/*是:结果可用发送给他们。 */
retVal = DPM_sendResult (gMmwDssMCB.dataPathObj.objDetDpmHandle、TRUE、&resultBuffer);
If (RetVal < 0)

test_print(“错误:无法将结果[错误:%d]发送到 remote\n“、RetVal);
}
}

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

    您好:Mark、

    启用 PRINT 语句将增加执行一组特定指令所需的时间。  如果要添加 PRINT 语句、请增加帧周期。

    我看到您只是想检查是否将正确的值写入了某个地址。 在这种情况下、您只需添加 IF 条件来比较结果并消除打印结果。

    此致、

    Samhitha

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

    您好、我现在已将接口时间设置为 1000 毫秒、这解决了我的问题。

    不过、我还有一个关于通过 HSRAM 将自定义数据从 DSS 正确传输到 MSS 的问题。 现在我将我的单个字节写入 ptrHsramBuffer->payload,从我看到的已经被使用了,虽然似乎有很多自由空间?

    您能否建议在 DSS 和 MSS 之间移动自定义数据的最佳方法? 我当时正在考虑两个选项
    1.) 向 HSRAM 结构添加专用 STFT 有效载荷
    2.) 将 STFT 结果保存在 HSRAM 结构内当前有效载荷对象的末尾、我目前正在做这件事

    第一个选项似乎更简洁、但我担心修改此结构可能会影响 MSS 端的现有上游代码。

    感谢您的专家见解
    此致
    标记

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

    您好:Mark、

    我建议您更新 DPC_ObjectMSS.Result 结构、该结构包含 Detection_Execute 所需数据的指针。 您可以 根据您的要求在结构中添加另一个字段。

    此致、

    Samhitha