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/AM3352:当没有网络时、Sendto 不会释放内存

Guru**** 2601915 points
Other Parts Discussed in Thread: SYSBIOS

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/585315/rtos-am3352-sendto-does-not-free-memory-when-there-is-no-network

器件型号:AM3352
Thread 中讨论的其他器件:SYSBIOS

工具/软件:TI-RTOS

在我们的应用中、我们将使用 sendto 函数每2.5秒发送一次 UDP 广播、直到看到响应。  如果没有连接以太网电缆、我们会看到在~190调用后、sendto 将返回 socket_error。  进一步的检查表明、这是因为我们获得了 ENOBUFS、即"尝试发送数据时内存分配失败"。

问题是、如果没有电缆、因此没有实际将数据包输出到线路上的机制、如何释放之前调用 sendto 分配的内存?  当前正在运行 NDK 2.24.3.35。

Kevin Jennings

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

    让我咨询一位具有更多 NDK 经验的同事、我很快会回复。

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

    尊敬的 Kevin:

    如果驱动程序出现问题,NIMUSendPacket() API (由堆栈内部调用)会释放内存:

    空 NIMUSendPacket (句柄 HIF、PBM_Pkt* pPktt)
    {
    NETIF_DEVICE_PTR_DEVICE;
    
    /*获取 NIMU 网络接口对象。 *
    PTR_DEVICE =(NETIF_DEVICE *) HIF;
    
    /*通过注册的“发送”功能将数据包传递给驱动程序。 *
    如果(PTR_DEVICE_>SEND (PTR_DEVICE_,(PBM_Handle)pPKT)<0)//ß 这是对驱动程序函数的调用
    {
    /*驱动程序报告错误,无法传输数据包。
    * NIMU 将清理数据包内存。 *
    PBM_FREE ((PBM_Handle) pPktt);
    返回;
    }
    返回;
    } 

    查看驾驶员返回的内容会有所帮助。  是否可以在驱动程序的发送功能中放置断点(在拔下电缆后)?  如果您不确定 NIMU 驱动程序的发送功能是什么,则可以查找驱动程序源中的"PTR_DEVICE_>SEND 分配位置:

    PTR_DEVICE_>SEND ="EmacSend"; 

    由于上述代码是从 AM335x SDK (

    C:\ti\am335x_sysbios_ind_sdk_01.03.03\sdk\os_drivers\source\ICSS\ICSS_NIMU_eth.c)。

    此致、

    伊曼纽尔