STM32
直播中

李颜

7年用户 1283经验值
私信 关注
[问答]

电脑TCP客户端连接开发板时LWIP出现错误怎么解决?

开发板使用的STM32F407,UCOSII+LWIP,开发板作TCP服务器时,用电脑作TCP客户端连接,连接数在第四个时LWIP出现错误:memp_malloc: out of memory in pool NETCONN。请问该修改哪个参数呢?

回帖(1)

tulin

2024-5-9 16:18:00
出现 "memp_malloc: out of memory in pool NETCONN" 错误时,表示 LWIP 在分配内存时遇到了问题。这通常是因为系统中可用的内存不足。要解决这个问题,你可以尝试以下几个步骤:

1. **检查内存泄漏**:首先,检查你的应用程序是否有内存泄漏。可以使用一些工具来帮助检测内存泄漏,例如 STM32CubeIDE 的内存分析工具。

2. **优化内存使用**:检查你的应用程序,看看是否有可以优化内存使用的地方。例如,减少全局变量的使用,使用栈变量代替,或者减少不必要的内存分配。

3. **调整 LWIP 配置**:根据你的应用程序需求,调整 LWIP 的配置参数。以下是一些可能需要调整的参数:

   - `TCP_WND_SIZE`:TCP 窗口大小,可以根据你的网络环境进行调整。
   - `TCP_MSS`:TCP 最大报文段大小,可以根据你的网络环境进行调整。
   - `TCP_SND_BUF`:TCP 发送缓冲区大小,可以根据你的应用程序需求进行调整。
   - `TCP_MAXRTX`:TCP 最大重传次数,可以根据你的网络环境进行调整。

4. **增加内存池大小**:在 LWIP 配置文件中,增加 `NETCONN` 内存池的大小。例如,你可以在 lwipopts.h 文件中找到以下宏定义,并尝试增加它们的值:

   ```c
   #define MEMP_NUM_NETCONN             (4 + 1)
   ```

   这里的 `4` 表示你之前能够成功建立的连接数,你可以尝试将其增加到更高的值,例如 `8` 或 `16`。

5. **使用外部内存池**:如果你的应用程序需要更多的内存,可以考虑使用外部内存池。LWIP 允许你使用自定义的内存管理函数来分配和释放内存。你可以在 lwipopts.h 文件中定义自己的内存管理函数:

   ```c
   #define LWIP_MALLOC(m)              your_malloc_function(m)
   #define LWIP_FREE(m)                your_free_function(m)
   ```

   然后实现这些函数,使用外部内存池进行内存管理。

6. **升级硬件**:如果上述方法都无法解决问题,可能需要考虑升级你的开发板硬件,以提供更多的内存。

通过以上步骤,你应该能够解决 LWIP 出现 "memp_malloc: out of memory in pool NETCONN" 错误的问题。
举报

更多回帖

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