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.

[参考译文] AWR1843BOOST:通过 UART 传输立方体数据中的 xdc.runtime.Error.raise

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

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/1312518/awr1843boost-xdc-runtime-error-raise-in-transferring-cube-data-via-uart

器件型号:AWR1843BOOST
主题中讨论的其他器件:AWR1843

您好!
为了通过 UART 从 AWR1843传输立方体数据、我遵循以下链接中的建议:
e2e.ti.com/.../iwr6843isk-ods-firmware-modification-pointers-to-send-a-part-of-1d-fft-data-over-to-the-serial-port
我在 MSS_main.c 中修改了函数静态 void MmwDemo_TransourceProcessedOutput、如下所示:
静态 void MmwDemo_TransourceProcessedOutput
(
UART_Handle uartHandle、
DPC_5.45V Detection_Execute *结果,
MmwDemo_output_message_stats * timingInfo
)
{
MmwDemo_output_message_header 标题;
/Mmw Demo_Gui S451el *pGuiMonSel;
Demo_Sub * subFrameCfg * subFrameCfg;
uint32_t tlvIdx = 0;
//uint32_t index;
uint32_t numPaddingBytes;
uint32_t packetLen;
uint8_t 边界填充[MMWDEMO_OUTPUT_MSG_SEGMENT_LEN];
MmwDemo_output_message_tl [MMWDEMO_OUTPUT_MSG_MAX];
int32_t 错误代码;
uint16_t * detMatrix =(uint16_t *) result -> detMatrix.data;
DPIF_PointCloudCartesian * objOut;
//cmplx16ImRe_t *azimuthStaticHeatMap;
DPIF_PointCloudSideInfo * objOutSideInfo;
DPC_S Detection_Stats *统计数据;

/*获取子帧配置*/
//subFrameCfg =&gMmwMssMCB.subFrameCfg[result->subFrameIdx];Ramin

/*获取 GUI 监视器配置*/
//pGuiMonSel =&subFrameCfg->guiMonSel;Ramin

/*清除消息标题*/
memset ((void *)&header、0、sizeof (MmwDemo_output_message_header);

/
发送已启用的数据、因为处理结果来自 DSP、
需要对缓冲指针进行地址转换
* /
{
detMatrix =(uint16_t *) SOC_translateAddress ((uint32_t) detMatrix、
SoC_Translate Addr_Dir_ ROM_OTHER_CPU,
错误代码(&ER);
DebugP_assert ((uint32_t) detMatrix!= SOC_TRANSLATEADDR_INVALID);

objOut =(DPIF_PointCloudCartesian *) SOC_translateAddress ((uint32_t) Result->objOut、
SoC_Translate Addr_Dir_ ROM_OTHER_CPU,
错误代码(&ER);
DebugP_assert ((uint32_t) objOut!= SOC_TRANSLATEADDR_INVALID);

objOutSideInfo =(DPIF_PointCloudSideInfo *) SOC_translateAddress ((uint32_t) Result->objOutSideInfo、
SoC_Translate Addr_Dir_ ROM_OTHER_CPU,
错误代码(&ER);
DebugP_assert ((uint32_t) objOutSideInfo!= SOC_TRANSLATEADDR_INVALID);

stats =(DPC_Collection* Detection_Stats ) SOC_translateAddress( uint32_t ) result->stats,
SoC_Translate Addr_Dir_ ROM_OTHER_CPU,
错误代码(&ER);
DebugP_assert ((uint32_t) stats!= SOC_TRANSLATEADDR_INVALID);


Result->radarCube.data =(void *) SOC_translateAddress (uint32_t) Result->radarCube.data,
SoC_Translate Addr_Dir_ ROM_OTHER_CPU,
错误代码(&ER);
DebugP_assert ((uint32_t) result->radarCube .data!= SOC_TRANSLATEADDR_INVALID);

////////////////

/*标题:*/
header.platform = 0xA1843;
header.magicWord[0]= 0x0102;
header.magicWord[1]= 0x0304;
header.magicWord[2]= 0x0506;
header.magicWord[3]= 0x0708;
header.numDetectedObj = result->numObjOut;
header.version = MMWAVE_SDK_VERSION_BUILD |
(MMWAVE_SDK_VERSION_BUGFIX << 8)|
(MMWAVE_SDK_VERSION_MINOR << 16)|
(MMWAVE_SDK_VERSION_MAJOR << 24);

packetLen = sizeof (MmwDemo_output_message_header);
// Ramin 添加
if (result->radarCube。data)
{
TL[tlvIdx].type = 2;
tl[tlvIdx].length = result->radarCube。dataSize;
packetLen += sizeof (MmwDemo_output_message_tl)+ tl[tlvIdx].length;
tlvIdx++;


header.numTLV = tlvIdx;
/*将数据包长度取整为 MMWDEMO_OUTPUT_MSG_SEGM_LEN 的倍数*/
header.totalPacketLen = MMWDEMO_OUTPUT_MSG_SEGM_LEN *
((packetLen +(MMWDEMO_OUTPUT_MSG_SEGM_LEN-1))/MMWDEMO_OUTPUT_MSG_SEGM_LEN);
header.timeCpuCycles = PMU_getCount (0);
header.frameNumber = stats->frameStartIntCounter;
header.subFrameNumber = Result->subFrameIdx;

UART_writePolling (uartHandle、
(uint8_t*)&HEADER,
sizeof (MmwDemo_output_message_header);

tlvIdx = 0;
// Ramin 添加
if (result->radarCube。data)
{
uart_writePolling (uartHandle、(uint8_t*)&Result->radarCube .data、Result->radarCube .dataSize);


/*发送填充字节*/
numPaddingBytes = MMWDEMO_OUTPUT_MSG_SEGM_LEN -(packetLen &(MMWDEMO_OUTPUT_MSG_SEGM_LEN-1));
if (numPaddingBytes<MMWDEMO_OUTPUT_MSG_SEGMENT_LEN)
{
UART_writePolling (uartHandle、
(uint8_t*)填充、
NumPaddingBytes);


但是在运行 I gut 后、以下错误:
Thschoclia Type_Task 发生异常。
任务句柄:0x80032c8。
任务堆栈基地址:0x8003328。
任务堆栈大小:0x1000。
R0 = 0x52088000 R8 = 0x0800d530
R1 = 0x0800d268 R9 = 0x0800b340
R2 = 0x00000008 R10 = 0x52080000
R3 = 0x00000001 R11=0x00000001
R4 = 0xFFF7e700 R12 = 0x00003394
R5 = 0x08001938 SP (R13)= 0x08003d38
R6 = 0x00000014 LR (R14)= 0x00016f71
R7 = 0x52080014 PC (R15)= 0x0001909c
PSR = 0x800c019f
DFSR = 0x0000000d IFSR = 0x00000000
DFAR = 0x52088000 IFAR = 0x00000000
{MODUL#43}:第205行:错误{id:0x1a0000、args:[0x1909c、0x16f71]}
xdc.runtime.Error.raise:正在终止执行

错误出现在以下行中:/uart_writePolling (uartHandle、(uint8_t*)&result->radarCube .data、result->radarCube .dataSize);
但是、当我将传输大小减小到8192 (pow (2、13)或更小、如下所示时、没有问题:
uart_writePolling (uartHandle、(uint8_t*)&Result->radarCube。data、pow (2、13);
我想 UART_writePolling 的最大传输存在限制、我不知道这一点。
我很高兴你能帮助我解决上述问题。

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

    您好!

    您在运行什么演示? 配置是否只有一帧?

    如果有多个帧、则在下一个帧开始之前没有足够的时间完成 UART 传输

    谢谢!

    塞萨尔

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

    您好!  

    谢谢你的答复。 我在中运行开箱即用演示

    C:Out_Of_Box_Demo

    我已将配置更改为一帧和1000ms 帧周期、如下所示:

    FlushCfg
    dfeDataOutputMode 1
    通道配置15 5 0
    adcCfg 2 1
    adcbufCfg -1 0 1 1 1
    低功耗0 0 0
    profileCfg 0 77 7 3 39 0 0 100 1 256 7200 0 30
    线性调频脉冲配置0 0 0 0 0 0 0 0 1
    线性调频脉冲配置1 1 0 0 0 0 4
    frameCfg 0 1 32 1 1000 1 0
    guiMonitor -1 1 1 0 1
    cfarCfg -1 0 2 8 4 3 0 15.0
    cfarCfg -1 1 0 4 2 3 1 15.0
    multiObjBeamForming -1 1 0.5
    calibDcRangeSig -1 0 -5 8 256
    离合器拆卸-1 0
    compRangeBiasAndRxChanPhase 0.0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 0 1 0
    measureRangeBiasAndRxChanPhase 0 1. 0.2
    aoaFovCfg -1 -90 90 -90 90
    cfarFovCfg -1 0 0.25 8.64
    cfarFovCfg -1 1 -10.59 10.59
    已扩展 MaxVelocity -1 0
    CQRxSatMonitor 0 3 11 121 0
    CQSigImgMonitor 0 127 8
    类比监视器0 0
    lvdsStreamCfg -1 0 0 0 0
    calibData 0 0 0
    sensorStart

    如您所见、是帧中具有32次迭代的循环。 未知的问题甚至是 、当迭代被减少时、我也会收到一个错误、例如1。  

    提前感谢您的帮助

    此致

    Ramin

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

    您好!

    有关 uart_writePolling()的一些附加信息,请参阅

    https://e2e.ti.com/support/processors-group/processors/f/processors-forum/465080/what-difference-is-between-uart-functions-uart_writepolling-and-uart_write

    谢谢!
    塞萨尔

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

    谢谢你的答复。 关于对你建议的胎面的解释和执行一些测试,因为我在  UART_writePolling()中找到了大小  的意思是缓冲区的大小而不是数据的长度。 此外、我发现 radarCube .data 不是  我想   通过 UART 输出的正确变量。

    我想 为一帧中的所有接收器和线性调频脉冲发送1D 距离 FFT 输出。 它应该像多维数据集(范围 Bean 的数量、num Tx * num Rx、num chirps *循环数量)

    如果您能确认是否 正确理解 UART_writePolling ()的功能 ,以及 1D Range FFT 对应的地址和变量名称,我们将不胜感激。  

     你度过一个美好的周末

    此致

    Ramin

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

    您好!

    1D 距离 FFT 的地址与雷达立方体的地址

    有关 UART 驱动程序的更多信息、我建议您查看相关文档、

    C:\ti\mmwave_sdk_03_06_00_00-LTS \packages\ti\drivers\uart\docs\doxygen\html\index.html

    谢谢!

    塞萨尔

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

    您好!  

    我只是看了 Doxygen。 该示例与我在 main.c 中所做的相似。 由于我是一名固件调试新手、因此非常感谢您更详细地进行说明。   

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

    您好!

    请查看本视频并告诉我们、如果您有任何具体问题

    谢谢!

    塞萨尔

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

    您好!  

    问题是、我如何修改以下命令来解决错误

    uart_writePolling (uartHandle、(uint8_t*)&Result->radarCube。data、sizeof (Result->radarCube));

    在解释共同的 doxigen 我找不到在上述命令和 doxigen 上提到的格式的任何区别。  

    我还无法解决此问题。