lvluoo 发表于 2025-7-18 10:12

如何在CubeIDE中使LwIP与CMSIS_V2一起工作

本帖最后由 lvluoo 于 2025-7-28 21:49 编辑


有一个Nucleo-F439ZI开发板,正在搞一个简单的应用程序,用于通过UDP端口回显消息。
当我使用LwIP原始API生成项目时,通过回调函数和板子能够实现这个功能。
然而,一旦我在CubeMX配置界面中启用CMSIS_V2 RTOS并创建几个线程(例如定期闪烁两个不同的LED),程序就会在"默认线程"中调用MX_LWIP_Init()后立即冻结。我甚至没有机会初始化Netconn结构来监听传入的数据包或其他操作。
如果我将这个初始化调用注释掉,所有线程都能按预期运行。但只要调用了这个LwIP初始化函数,整个程序就会冻结。
我在想是否遗漏了某些步骤,或者在RTOS中使用LwIP方式不对。由于这是自动生成的代码却无法工作,我完全摸不着头脑。
另外,在调试模式下,我没有收到任何HardFault或异常错误,代码看起来在正常运行,但所有线程都完全冻结了。
当在默认线程中调用MX_LWIP_Init()时,所有任务都会被冻结。

公羊子丹 发表于 2025-7-24 07:18

LwIP 配 RTOS 时要用 Netconn 或 Socket API,别用原始 API,原始 API 不支持多线程。

周半梅 发表于 2025-7-24 07:19

默认线程里调用 MX_LWIP_Init() 后应该只初始化网络栈,后续操作要放到单独线程里跑。

帛灿灿 发表于 2025-7-24 07:20

你检查一下 LWIP_DHCP 或 LWIP_DNS 有没有开,有些需要额外任务支持。

童雨竹 发表于 2025-7-24 07:22

LwIP 初始化后得保证 sys_now 和 sys_jiffies 之类的时间戳函数跟 RTOS 对接上了。

万图 发表于 2025-7-24 07:25

有可能是网卡驱动(ETH)没跟 RTOS 配好,收发中断或者任务没启动。

Wordsworth 发表于 2025-7-24 07:29

Cube 默认生成的 lwipopts.h 里,NO_SYS 要设成 0,RTOS 模式不能用裸机配置。

Bblythe 发表于 2025-7-24 07:31

建议用 Netconn 重新写下 UDP 收发,别混用原始 API 和 RTOS,坑多。

Pulitzer 发表于 2025-7-24 07:32

你的网卡中断和 RTOS 优先级也要检查一下,有可能被别的任务锁死了。

Uriah 发表于 2025-7-24 07:33

调试的时候把 LWIP_DEBUG 打开,看下是不是卡在 ethernetif_input() 里了。

Clyde011 发表于 2025-7-24 07:34

如果不想麻烦,先跑官方的 LwIP_RTOS 例程,能跑起来再按需改最稳。
页: [1]
查看完整版本: 如何在CubeIDE中使LwIP与CMSIS_V2一起工作