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.

[参考译文] RTOS/TMDSEVM6670:dstDataBuffer 在 memcpy 之后冻结

Guru**** 2551200 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/607611/rtos-tmdsevm6670-dstdatabuffer-gets-frozen-after-memcpy

器件型号:TMDSEVM6670

工具/软件:TI-RTOS

大家好、团队、

在 C6670上实施 SRIO 期间、我遇到了以下问题:

我的代码基于 SRIO_LpbkDioIsr_evmc6678_C66BiosExampleProject

因此、有两个缓冲区: srcDataBuffer 和 dstDataBuffer。

我的通信工作正常、当 TX 缓冲区发生变化时、RX 数据也发生变化。 一切都好。

然后、我尝试在您提供的 RX 缓冲区上使用 memcpy、以将我收到的数据复制到另一个缓冲区、我计划对其进行进一步计算。

我使用 dstDataBuffer 执行的所有操作如下所示:

#define Size_DIO_packet 256
#define SRIO_DIO_LSU_ISR_NUM_Sockets 1

SRIO_SockHandle hSrioSock;

uint8* dstDataBuffer;

dstDataBuffer =(uint8_t*) OSAL_srioDataBufferMalloc (size_DIO_packet);

if (dstDataBuffer = NULL)
&
System_memf ("错误:目的缓冲区(0) sockpit (0);dstio_sock_sense0[s/set_s/set_s/set_s/setrfu_s/set_s/setrfu_s/setrfu_s[s/set_s/setrfu_s/set_s/sh




);fet (0)、s/set_s/set_s/set_s/setrfu_s/set_sense0](0

)、s/set_s/set_s/set_s/set_s/set_s/set_s/set_s/set_s/set_s/set





//我的数据缓冲区定义如下:
uint8_t* data = new uint8_t [256];
memset (&data[0]、0、size_DIO_packet);//零填充 

如果我只复制1字节的 dstDataBuffer、则将接收的下一个数据包大小为255字节。 如果我复制256B、则所有数据包都会"冻结"、并且没有任何单字节发生变化。

我尝试以多种方式分配这些 src 和 dst 缓冲区、同时也使用 malloc 或新 uint8_t、但没有成功。

现在、我可以接收许多数据包、但我无法将它们用于任何内容。 如果我尝试、我的 SRIO Rx 缓冲器将被"冻结"、直到完全 DSP 复位。

如果您需要更多的配置数据 plz 写入。

期待您的回复、

提前感谢您、

Maciej

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    其他信息(可能有用):
    
    //枚举
    枚举
    枚举{
    burg_size = 256
    };
    
    #define MAX_MEM_Mgr_entries 1002. 

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

    我们正在处理这一问题。 反馈将发布在此处。

    此致、
    Yordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您可能遇到内存争用问题、其中内核尝试同时访问与外设相同的内存。 根据定义、不应发生这种情况、因为 Rx 队列中的描述符意味着硬件不应接触此存储器。 您可能需要验证您的配置是否正确(即您的 Tx 和 Rx 队列彼此隔离)、以及是否没有其他外设(如 EDMA)也可能在存储器上跳转。 您还可以尝试将描述符移动到另一个存储器、以查看行为是否发生变化。