工具与软件:
尊敬的 Pourya:
正如您先前就我们报告的问题所作的回复、何时会使用静态内存池而不是动态内存分配、通过 LWIP 发布工业通信 SDK。
请更新详细信息。
谢谢。
T Narasimha Rao
上一篇回复2个月前...
尊敬的 Narasimha:
在下一版本中、LWIP 将使用静态内存池而不是动态内存分配。 我希望这可以解决您的问题。
除此之外、您能否给我们提供一些有关您设置的背景信息、什么是循环 I/O 时间? 电路板启动后是否很快出现问题?
此致
Pourya
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.
工具与软件:
尊敬的 Pourya:
正如您先前就我们报告的问题所作的回复、何时会使用静态内存池而不是动态内存分配、通过 LWIP 发布工业通信 SDK。
请更新详细信息。
谢谢。
T Narasimha Rao
上一篇回复2个月前...
尊敬的 Narasimha:
在下一版本中、LWIP 将使用静态内存池而不是动态内存分配。 我希望这可以解决您的问题。
除此之外、您能否给我们提供一些有关您设置的背景信息、什么是循环 I/O 时间? 电路板启动后是否很快出现问题?
此致
Pourya
尊敬的 Narasimha:
与动态内存分配相关的多个稳定性问题已在工业通信 SDK v 9.2.0.15中修复。 我建议您一探究竟。
下载链接: https://www.ti.com/tool/download/INDUSTRIAL-COMMUNICATIONS-SDK - AM64X/09.02.00.15.
版本说明: https://software-dl.ti.com/processor-industrial-sw/esd/ind_comms_sdk/am64x/09_02_00_15/docs/am64x/ethernetip_adapter/eip_releasenotes.html
请注意、从示例访问 I2C0时、由于 I2C 驱动器不在线程安全、可能存在一些死锁情况。 作为一种权变措施、可以根据硬件使用基于 GPIO 的 LED。
此致
归档开发
嗨 、Archit Dev、
我们正在测试来自新工业通信 SDK 9.02.00.15的以太网 IP 适配器分立式 IO 示例。
以太网/I 适配器 分立式 IO 应用程序在我们连续运行(随机超过2小时)时随机崩溃。
我们在发生崩溃时观察到以下日志。
[r5f0-0] 11594.314224s:ENIP_IPSTK_allocFrameBuf 返回 NULL、是否内存不足?
[r5f0-0] 11603.314015s:ENIP_IPSTK_allocFrameBuf 返回 NULL、是否内存不足?
[r5f0-0] 11612.313768s:ENIP_IPSTK_allocFrameBuf 返回 NULL、是否内存不足?
[r5f0-0] 11612.319392s : pbuf_free: p->ref > 0ASSERT: 11612.319429s:/nightlybuilds/ind_comms_internal/jenkins/ind_comms
[r5f0-0] 11612.319474s:_sdk_am64x_09_02_00_15/mcu_plus_sdk/source/networking/lwip-stack/pbuf_vide src
[r5f0-0] 11612.319515s ::755:0 failed!!
请告诉我们如何停止此操作。
谢谢你。
嗨、Archit Dev、
感谢您的答复。
以下是请求的详细信息:
1.你运行的测试是什么?
我们将运行 EtherNet/IP 适配器分立式 IO 应用。 与 PLC 之间进行数据通信
2.测试拓扑是什么?
数据从 R5F1_0内核上运行的应用程序通过 IPC Notify 和共享存储器收集。
从 R5F1_0收集的数据作为循环数据(隐式消息)发送到 PLC。
如果 PLC 针对数据发出任何请求、则该请求会从 R5F1_0中获取、并作为非循环数据(显式消息)发送回 PLC。
3.应用程序代码中是否有运行时动态内存分配调用?
我们的应用中没有任何运行时动态内存分配调用。
谢谢你。
尊敬的 Narasimha:
根据您的描述、这意味着堆栈在 一个内核上运行( R5F0_0 ?)。 您正在尝试从另一个内核收集数据。
我在此配置中看到的常见陷阱是、您可能会阻止回调从另一个内核获取数据、这反过来又剥夺了堆栈运行时间、最终将导致缓冲区溢出或崩溃。
解决方案是 不直接在堆栈回调上使用阻塞调用。 您可以拥有一个缓存的值副本、供堆栈回调使用而不会发生阻塞。 (与堆栈在同一内核上运行的另一个任务负责从另一个内核获取数据、并具有可用的本地副本、以便回调使用这些副本)。
此致
Pourya