Other Parts Discussed in Thread: AM2434, SYSCONFIG
器件型号: 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 () 的互斥量。 鉴于这些保护/解除保护区域通常很小且频繁、我们还怀疑基于互斥量的方法可能会在负载下增加不必要的开销和额外的上下文切换复杂性。
问题
- 这是否是 AM243x 的 MCU+ SDK LwIP FreeRTOS 端口中的已知问题?
- 将 LWIP_freertos_SYS_arch_protect_uses_mutex 设置 为 0 是否被视为正确/认可的解决方案、或者是否有我们应该应用的建议修复/补丁/配置?
- 是否存在可能导致这种行为的特定 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)