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/AM3359:因 ICEv2上的 EtherCAT 通信而损坏的变量

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

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/570485/rtos-am3359-variables-corrupted-by-ethercat-communication-on-icev2

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

工具/软件:TI-RTOS

您好!

我一直在使用 AM335x ICEv2在机器人上运行一些低级控制环路- 通过 EtherCAT 获取命令、计算电机扭矩、通过 SPI 发送扭矩和接收编码器位置、并通过 EtherCAT 发回一组数据。  我发现、当 EtherCAT 未运行时、环路的行为符合预期、但间歇性地、当通过 EtherCAT 进行通信时、某些数据会损坏-如所示、变量意外跳转到随机值。  这种情况大约在~10Hz 的频率下发生、控制环路以5kHz 的频率运行、EtherCAT 通信以1-2 kHz 的频率进行。

我怀疑环路中的变量在后台被 EtherCAT 库覆盖、但我完全感到困惑。  例如、重新调整代码以将3个浮点值的数组替换为3个单独的浮点值似乎可以解决问题(对于该特定变量)。  除了在 EtherCAT 输入/输出映射函数中读取 EtherCAT 数据的结构外、控制函数和 EtherCAT 函数之间不共享任何变量。

我已经尝试在控制循环任务和 EtherCAT 输入/输出映射函数中使用信标来保护数据结构、但这没有什么不同。  

我将使用 Beckhoff SSC 工具生成 EtherCAT 从站协议栈代码。

是否有人遇到过这样的问题?  我想这是我的最终错误、而不是 EtherCAT 或 TI RTOS 如何处理数据、但我不知道此时应从何处查看。  如果有更多信息、请告诉我、我可以分享这些信息。

谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    RTOS 团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你(们)好

    正在使用的 ISDK CCS、XDCtools 和 SYS/BIOS 的版本是什么。
    每个 ISDK 版本对要使用的 CCS、XDCTools 和 SYS/BIOS 版本都有特定要求。 ISDK 版本的用户指南中介绍了这些内容。

    堆栈溢出条件也可以表现出间歇性行为。
    有关调试的视频很好、请访问- training.ti.com/debugging-common-application-issues-ti-rtos

    针对正在使用的 SYS/BIOS 版本的 SYS/BIOS 用户指南也有一些关于堆栈和堆设置的好信息。 默认位置为 c:\ti\BIOS_version\docs

    这里还有一些很好的指针
    SYSBIOS wiki 页面为 processors.wiki.ti.com/.../Category:SYSBIOS

    更旧、但仍然有用 的 processors.wiki.ti.com/.../DSP_BIOS_Debugging_Tips

    除了 EtherCAT 之外、downloads.ti.com/.../index_FDS.html 中 AM437的完整 EtherCAT 应用还实现了电机控制应用。 堆栈和堆设置可能会为您提供一些额外的见解。

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

    大家好、David、感谢您的回答。

    我正在使用

    SYS/BIOS 6.45.1.29

    XDCtools 3.32.1.22、

    ISDK 02.01.02.02

    CCS  6.2.0.00050

    查看用户指南、我发现我运行的其他软件版本并不都与此版本 ISDK 的软件要求相匹配。  您是否希望匹配不匹配的版本会导致这样的问题?

    谢谢。

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

    每个 ISDK 版本仅针对一个特定的工具套件进行开发和测试。 在这些情况下、当我意外加载了错误版本的 SYSBIOS 和/或 XDCtools 时、我在编译或执行程序时遇到问题。 使用正确版本时问题已解决。 这已经成为我的开发和调试过程中的第一个检查。

    获取特定版本的 SYSBIOS 或 XDC 工具的好位置是
    software-dl.ti.com/.../index.html

    CCS 版本可从 processors.wiki.ti.com/.../Download_CCS 下载

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

    好的、因此使用适当匹配的工具套件版本时问题仍然存在。  我想我将会更深入地研究堆栈/堆设置、但使堆栈大得多的简单测试无法正常工作。

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

    尊敬的 David:  

    以下是我尝试过的一些事情、其中没有一项工作或帮助我了解问题是什么:

    -增加了任务和系统的堆栈大小

    -按照 此处的建议、通过在_stack 处设置硬件观察点来查找堆栈溢出

    -ROV 中的“Scan for errors”(扫描错误)-显示没有错误

    -"Stack Usage"工具似乎不起作用-我收到消息"stack usage not supported! 找不到 OFD 实用程序。"

    启用"HeapTrack"后、我可以看到使用的峰值堆远低于其最大大小

    我认为它可能与 EtherCAT 从站堆栈处理数据读取/写入地址有关。  在 SSC 工具中、这些变量的说明显示"设置必须在 ESC 的用户存储器范围内。 (工具不会检查此项)。  但是、我不清楚"用户存储器的范围"是什么、以及应如何选择处理数据最小/最大读/写地址。  

    此外、是否可以通过电话等方式亲自获得有关此问题的帮助、从而加快该过程?

    感谢您迄今提供的所有帮助、