ST意法半导体
直播中

胖子的逆袭

12年用户 1128经验值
私信 关注
[问答]

LWIP线程堆栈内存在几次交换后停止工作怎么办呢

我目前正在编写代码以将操纵杆数据从 PC 发送到 STM32 Nucleo 板。我使用 pygame 读取操纵杆值并使用 python 的套接字库通过路由器将数据发送到 MCU。MCU 和 PC 都连接到路由器。在 MCU 端,我使用了 STM32 Cube pkg 中给出的 LWIP 的修改示例代码。MCU 还运行一个运行 LWIP 的 FreeRTOS 调度程序。我能够让它在 2 线程 FreeRTOS 代码中完美运行。但是,当我将代码转移到 16 线程代码 [主项目] 时,LWIP 在几次交换后停止工作。从某种意义上说,我在 4-5 次交换后没有收到任何 ping。
为解决该问题而进行的一些实验
  • 将PC端的发布频率降低到20hz。这会增加交换持续时间,但会在几分钟后失败。
  • 尝试将 FreeRTOS 配置的 ConfigMaxPriority 参数从 56(cube ide 默认值)减少到 16。[操作时间增加]
  • 尝试更改 FreeRTOS 主堆内存和 LWIP 线程堆栈内存 [没有区别]
我认为,这是一个内存问题。但不知道如何解决。有人可以就此给我建议吗?


回帖(1)

刘凯

2022-12-23 09:55:09
我能够通过降级到 CMSIS v1 来解决这个问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分