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.

[参考译文] TMS320F28388D:这是否是 C2000Ware LWIP 示例代码中的错误?

Guru**** 2625255 points

Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/896100/tms320f28388d-is-this-a-bug-in-c2000ware-lwip-example-code

器件型号:TMS320F28388D
主题中讨论的其他器件:C2000WARE

是否有人可以确认我对 C2000Ware 版本3.01.00.00中此示例代码的理解?

在 f2838xif.c 中,在例程 f2838xif_transmit ()中,描述符数据指针设置为 pbuf 数据指针:

       pktDescPtr ->dataBuffer = q->payload;

 f2838xif_transmit ()的调用方随后调用 pbuf_free (),因为调用栈会展开。

这是一个错误、因为这两个事件之间没有同步:

1) 1) DMA 引擎复制存储器
2) 2)释放 pbuf、并由其他一些代码进行后续重用

如果我正确理解 LWIP 的 pbuf 模型、应该做的是 f2838xif 接口层使用 pbuf_ref()递增参考计数、然后以某种方式保存 pbuf 指针、然后当 TX 完成在 f2338xif_process_transmit ()中发生时、恢复 pbuf 指针、并调用 pbuf_free ()。 结果是,无论哪个 pbuf_free ()最后发生,都会导致内存被实际释放,并保证 DMA 访问在它之前。

感谢您的关注和建议。

此致、

镍氢电池

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

    您好、Nik、

    [引用 user="Nicholas Landriy"],如果我正确理解 LWIP 的 pbuf 模型,则 f2838xif 接口层会使用 pbuf_ref ()来递增参考计数。

    感谢您的反馈。 你是对的。 如果释放了 pbuf,则数据库将不再有效。 但是、您在使用它时是否遇到过任何问题?  

    我们尚未发现该 Web 服务器应用程序的问题、我们将此端口层用于。  

    感谢您提供有关 pbuf_ref()的信息。 我不知道这一点、应在其中一个即将发布的版本中记录缺陷并进行更新。  

    此致、

    Sudharsanan

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

    您好 Sudharsanan、

    我没有因这种行为而遇到任何问题、我只注意到这是在调试时读取代码的结果。

    感谢您确认我的理解、感谢您抽出宝贵的时间。

    此致、

    镍氢电池