[STM32H7] lwIP + FreeRTOS的项目在STM32CubeIDE上进行开发

[复制链接]
498|3
我运行一个需要较大堆栈的Mongoose项目。使用的是CubeIDE创建的默认任务,该任务仅初始化lwIP并进入无限循环休眠。

将堆栈设置为2048字对这个应用程序来说不够用,但如果我将堆栈设置得更高,lwIP就会停止工作(DHCP无法正常启动,我的应用程序在DHCP获取IP之后才开始运行)。我应该设置一个单独的任务吗?

有开发指南手册可以学习吗?内存是如何分配给lwIP的?需要将其在单独的任务中运行吗?

huahuagg 发表于 2025-10-9 11:43 | 显示全部楼层
LwIP不仅能在裸机上运行,也能在操作系统环境下运行,而且在操作系统环境下,用户能使用NETCONN API 与Socket API编程,相比RAW API编程会更加简便。操作系统环境下,这意味着多线程环境,一般来说LwIP作为一个独立的处理线程运行,用户程序也独立为一个/多个线程,这样子在操作系统中就相互独立开,并且借助操作系统的IPC通信机制,更好地实现功能的需求。

LwIP在设计之初,设计者无法预测LwIP运行的环境是怎么样的,而且世界上操作系统那么多,根本没法统一,而如果LwIP要运行在操作系统环境中,那么就必须产生依赖,即LwIP需要依赖操作系统自身的通信机制,如信号量、互斥量、消息队列(邮箱)等,所以LwIP设计者在设计的时候就提供一套与操作系统相关的接口,由用户根据操作系统的不同进行移植,这样子就能降低耦合度,让LwIP内核不受其运行的环境影响,因为往往用户并不能完全了解内核的运作,所以只需要用户在移植的时候对LwIP提供的接口根据不同操作系统进行完善即可。
huahuagg 发表于 2025-10-9 11:43 | 显示全部楼层
9168768e72f5a601b2.png

8.1.2. 添加FreeRTOS源码到工程组文件夹

在上一步我们只是将FreeRTOS的源码放到了本地工程目录下,还没有添加到开发环境里面的组文件夹里面,FreeRTOS也就没有移植到我们的工程中去。

接下来我们在开发环境里面新建FreeRTOS/src和FreeRTOS/port两个组文件夹,其中FreeRTOS/src用于存放src文件夹的所有内容,FreeRTOS/port用于存放portMemMang文件夹与portRVDSARM_CM?文件夹的内容,“?”表示3、4或者7,具体选择哪个得看你使用的是野火哪个型号的STM32开发板,具体见表8‑1。


huahuagg 发表于 2025-10-9 11:43 | 显示全部楼层
https://doc.embedfire.com/net/lwip/zh/latest/doc/chapter8/chapter8.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则

57

主题

59

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部