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.

[参考译文] MCU-PLUS-SDK-AM243X:ICSS FW HAL使用malloc而不是池

Guru**** 2528000 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1097085/mcu-plus-sdk-am243x-icss-fw-hal-uses-malloc-instead-of-pools

部件号:MCU-PLUS-SDK-AM243X

我使用的是自定义板AM243x和最后一个SDK MCU_plus_SDK_am243x_08_02_00_31

我正在按照您的文档中的建议测试PRP演示应用程序。

我刚刚发现,当发送PRP TX数据包时,FW HAL为数据包自身分配了一块动态内存:我希望使用内存池而不是malloc!

以下是 source/industrial_comms/hsr_prp/icss_fwhal/hsrPrp_red.c中的代码

int32_t RedTxPacket(void *icssEmachandle, ICSS_EMAC_TxArgument *txArg, void *userArg)
{

    ...
    
    redFrame = RedFrameAllocate(packetData, packetLength);

    if(!redFrame)
    {
        RED_DEBUG_MSG("%s: RedFrameAllocate failed!\n", __FUNCTION__);
        return (RED_ERR);
    }

    ret = RedFrameSend(hsrPrphandle, icssEmacHandle, redFrame, packetData,
                       packetLength,
                       queuePriority, portNum);

    RedFrameFree(redFrame);
    redFrame = NULL;

    if(ret)
    {
        RED_DEBUG_MSG("%s: RedFrameSend failed!\n", __FUNCTION__);
        return (RED_ERR);
    }

static RED_FRAME *RedFrameAllocate(const uint8_t *pFrame, int32_t frameSize)
{
    RED_FRAME *pRedFrame = NULL;
    uint16_t     vlanTag;
    uint16_t     redFrameMinSize;

    if(pFrame == NULL)
    {
        return (NULL);
    }

    /* Allocate the RED frame structure */
    pRedFrame = malloc(sizeof(RED_FRAME));

    if(!pRedFrame)
    {
        RED_DEBUG_MSG("%s: pRedFrame == NULL\n", __FUNCTION__);
        return (NULL);
    }

我想将PRP集成到已经处理池的应用程序中:

  • 如何避免使用malloc?
  • 我是否应该编写 RedTxPacket的自定义实现以customTxCallBack的身份进行传递?

提前感谢您的参与

  Andrea

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

    您好,Andrea:

    我的应用程序已在处理池

    能否解释一下您所指的池是什么?  

    如何避免使用malloc[/quot]

    为了避免使用malloc,我正在咨询团队,将于明天更新。

    此致

    Nilabh

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

    谢谢Nilabh。

    我们的应用程序对安全至关重要,因此严格禁止动态内存分配。

    这就是我们为发送和接收消息预先分配内存池的原因。

    我知道在ICSS中使用HSR/PRP时不可能实现零拷贝,因为TX/RX消息存储在MSRAM中而不是DDR中。

    顺便说一句,我不希望在ICSS FW HAL中找到动态分配

    展望未来。

      Andrea

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

    您好,Andrea:

    根据团队的讨论,您需要执行RedTx数据包的自定义实施。 我将在下周之前分享更多详细信息。 如果我无法返回,请随时提醒

    此致

    Nilabh