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.

[参考译文] AM2434:AM2434 + MCU+ SDK 11.00.00.15—在 RX 负载下的 sys_arch_protecT_nesting 中、LwIP/FreeRTOS 置为有效

Guru**** 2811145 points

Other Parts Discussed in Thread: AM2434, SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1618491/am2434-am2434-mcu-sdk-11-00-00-15-lwip-freertos-assert-in-sys_arch_protect_nesting-under-rx-load

器件型号: AM2434
主题: SysConfig 中讨论的其他器件

我们看到了   在  AM2434 (MCU+ SDK) 上将 LwIP (CPSW) 与 FreeRTOS 配合使用时出现稳定性问题。 在 RX 流量很大的情况下、系统经常在 LwIP 的 FreeRTOS 端口内置为有效时停止:

sys_arch.c (第 191 行周围)

LWIP_ASSERT(“unexpected sys_arch_protect_nesting“、sys_arch_protect_nesting > 0); 

观察到的行为

  • 即使在 RX 负载较低的情况下、问题也会重现;达到置位的概率会随着 RX 流量的增加而增加。
  • assert 表示  sys_arch_unprotect ()  在 sys_arch_protect_nesting   已经为 0 时被调用(即嵌套计数器似乎不同步)。
  • 我们审查了调用流程、还检查了围绕增量/减量生成的汇编、但似乎可以。
  • 另一种可能性是额外的取消保护,但当跟踪  sys_arch_protect   ()/ sys_arch_unprotect ()  和监视  sys_arch_protect_en嵌 套时 ,一切看起来都是一致的,直到计数器变得不一致。

解决方法/缓解措施

我们尝试  通过一个关键段来保护 sys_arch_protect_nesting 的递增/递减、并注意缓存一致性、但运气不好。 我们能够通过更改宏来消除这个问题:

LWIP_FREERTOS_SYS_arch_protect_uses_mutex = 0 

使用此设置时、端口将使用一个临界段(中断屏蔽至 syscall 优先级)、而不是  sys_arch_protect   ()/ sys_arch_unprotect ()  的互斥量。 鉴于这些保护/解除保护区域通常很小且频繁、我们还怀疑基于互斥量的方法可能会在负载下增加不必要的开销和额外的上下文切换复杂性。

问题

  1. 这是否是 AM243x 的 MCU+ SDK LwIP FreeRTOS 端口中的已知问题?
  2. 将  LWIP_freertos_SYS_arch_protect_uses_mutex 设置 为 0 是否被视为正确/认可的解决方案、或者是否有我们应该应用的建议修复/补丁/配置?
  3. 是否存在可能导致这种行为的特定 LwIP/FreeRTOS 配置限制(例如优先级设置,中断优先级,缓存一致性预期)?

文件引用

  • 源/网络/lwip/lwip-port/freertos/sys/sys_arch.c src
  • 源/网络/lwip/lwip-port/freertos/include/lwipopts_os.h

开发环境

  • MCU+ SDK:11.00.00.15
  • 编译器:TI ARM CLANG 4.0.4 LTS
  • SysConfig:1.26.0
  • CCS:20.40
  • 器件:AM2434 (Cortex-R5F 0-0)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Roberto:

    我们在测试中没有遇到此问题、至少在我的内存中的低流量吞吐量方面没有遇到此问题。 您观察到此问题时的时间标度是多少? 我可以尝试设置一个测试台来尝试重现此问题。  

    理想情况下、我们不建议删除操作系统端口的互斥保护。 这将防止以其他意想不到的方式出现问题。 为了更好地掌握这一点、我必须通过我们的内部专家进行测试。  

    我们提供的一个开箱即用示例中是否出现此问题? 您开发的定制应用程序中是否会看到这种情况? 有关在环境中运行的任何其他进程的详细信息将提供有关该问题的更好的背景信息。

    谢谢。此致、
    Teja。

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

    我们在 UART 上运行 mDNS + MQTT 客户端和以流模式运行的跟踪器的自定义应用中遇到此问题

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

    你(们)好  

    这是我们在测试中使用默认示例未观察到的情况。 我将与我们的内部团队核实、以检查禁用互斥体是否适合我们的环境。 请给我们 4-5 个工作日来研究这个问题。

    谢谢。此致、
    Teja。

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

    您好、Roberto  

    Teja 本周出差。 答复将进一步推迟。 请期待下周初回复、如果不是更早的话。 谢谢。  

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

    尊敬的 Roberto:

    经过一些检查、我们的团队成员发现、LwIP 中  LWIP_FREERTOS_SYS_arch_protect_uses_mutex 的默认配置设置为 0、表示该配置已测试并可正常工作。 此设置期望关键部分更短、并可以调用关键部分、从而阻止系统中的所有其他中断。

    因此、如果您的案例需要非常高的实时性能、我们可能需要探索其他方法来实现这一点。 但根据将宏设置为“0"时“时的应用程序行为结果、您可以进一步做出决定。 在 TI 方面、我们没有任何具体要求这个宏应该始终为 1。

    请告知我们测试的结果和观察结果、以便我们确定后续行动。

    谢谢。此致、
    Teja。