This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TM4C1294NCPDT:LWIP 服务器在几秒钟后停止工作

Guru**** 2333840 points
Other Parts Discussed in Thread: EK-TM4C1294XL, TM4C1294NCPDT
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/592700/tm4c1294ncpdt-lwip-server-stops-working-after-a-few-seconds

器件型号:TM4C1294NCPDT
Thread 中讨论的其他器件:EK-TM4C1294XL

你好

我在 LWIP 服务器中工作、并在此 项目中使用 FreeRTOS 和 Tivaware 2.1.3.156。

我创建一个 html 页面、通过 SSI 标签显示一些值。 此页面每隔1秒通过 html 中的元标签自动刷新一次:

几秒钟后,服务器停止工作。 但是、当移除自动刷新时、问题将在几小时内出现。

我尝试在 enet_io 示例中进行设置、但问题仍然存在。

这是我的 lwipops.h 文件:

//
//
// lwipopts.h - lwIP 的配置文件
//
//版权所有(c) 2013-2016 Texas Instruments Incorporated。 保留所有权利。
//软件许可协议
//
//德州仪器(TI)提供此软件仅供
和//仅供 TI 的微控制器产品使用。 软件归
// TI 和/或其供应商所有,并受适用的版权
//法律保护。 您不能将此软件与"病毒"开源
//软件组合在一起以形成更大的程序。
//
//此软件按“原样”提供,且存在所有故障。
//对于

本软件,不作任何明示、暗示或法定的保证,包括但不限于对适销性和适用性的暗示保证//特定用途。 在任何
//情况下、TI 不对任何
原因造成的特殊、意外或必然//损害负责。
//
//这是 EK-TM4C1294XL 固件包版本2.1.3.156的一部分。
////
*****************
//
//注:此文件源自 lwIP/src/include/lwip/opt.h
//头文件。
//
//有关其他详细信息,请参阅原始的"opt.h"文件和 lwIP
//文档。
////
*****************
#ifndef __LWIPOPTS_H__
#define __LWIPOPTS_H__

#include 

//
////
--- Stellaris / lwIP 端口选项---
////
*****************
#define HOST_TMR_INTERVAL 10. //默认值为0
//#define DHCP_EXPIRE_TIMER_ms (60 * 1000)
#define LWIP_HTTPD_SSI 1
#define LWIP_HTTPD_CGI 1
#define LWIP_HTTPD_DYNAMIC_HEADers 1
//#define EMAC_PHY_CONFIG EMAC_PHY_TYPE_EXTERNAL_RMII
//#define PHY_PHY_ADDR 1
#define EMAC_PHY_CONFIG (EMAC_PHY_TYPE_INTERNAL | EMAC_PHY_INT_MDIX_EN | \
EMAC_PHY_AN_100B_T_FULL_DUPLEX)
#define PHY_PHY_ADDR 0
#define NUM_TX_descriptors 8
#define NUM_RX_descriptors 8

//*********
////
--- 平台特定锁定---
////
*****************
#define SYS_Lighting_PROT 1 //默认为0
#define NO_SYS 0 //默认为0
#if!NO_SYS
#define LWIP_COMPAT_mutex 1
#define RTOS_FreeRTOS 1
#endif /*!no_SYS */
//#define memcpy (dst、src、len) memcpy (dst、src、len)
//#define SMEMCPY (dst、src、len) memcpy (dst、src、len)

//*************
////
--- 内存选项--------------------------------------------------------
////
*****************
//#define MEM_libc_malloc 0
#define MEM_alignment 4
#define MEM_SIZE (64 * 1024)
//#define MEMP_OVERFLOAD_CHECK 0
//#define MEMP_sanity_check 0
//#define MEM_USE_Pools 0
//#define MEMP_USE_CUSTOM_Pools 0

//*****************
////
--- 内部内存池大小--------------------------------------------------------
////
*****************
#define MEMP_NUM_PBUF 16 //默认16,为16
//#define MEMP_NUM_RAW_PCB 4
//#define MEMP_NUM_UDP_PCB 4
#define MEMP_NUM_tcp_PCB 40
//#define MEMP_NUM_tcp_PCV_Listen 8
//#define MEMP_NUM_tcp_SEG 16
//#define MEMP_NUM_REASSDATA 5
//#define MEMP_NUM_ARP_queue 30
//#define MEMP_NUM_IGMP_GROUP 8
#define MEMP_NUM_SYS_TIMEOUT 10 //5
//#define MEMP_NUM_NETBUF 2
//#define MEMP_NUM_NETCONN 4
//#define MEMP_NUM_TCPIP_MSG_API 8
//#define MEMP_NUM_TCPIP_MSG_INPKT 8
#define PBUF_POOL_SIZE 64 //默认16

//*********
////
--- ARP 选项---
////
*****************
//#define LWIP_ARP 1
//#define ARP_TABLE _SIZE 10
//#define ARP_Queuing 1
//#define ETHARP_trust_IP_MAC 1

/*************
////
--- IP 选项--------
////
*****************
//#define IP_Forward 0
//#define IP_OPTIONS 允许 1
#define IP_re组装 0 //默认为1
#define IP_Frag 0 //默认为1
//#define IP_REASS_maxage 3
//#define IP_REASS_MAX_PBUFS 10
//#define IP_FRAG_USS_STATUS_BUF 1
//#define IP_FRAG_MAX_MTU 1500
//#define IP_DEFAULT_TTL 255

//*********
////
--- ICMP 选项---
////
*****************
//#define LWIP_ICMP 1
//#define ICMP_TTL (IP_DEFAULT_TTL)

//*********
////
--- 原始选项---
////
*****************
//#define LWIP_RAW 1
//#define RAW_TTL (IP_DEFAULT_TTL)

//*********
////
--- DHCP 选项--------------------------------------------------------
////
*****************
#define LWIP_DHCP 1 //默认值为0
//#define DHCP_do_ARP_CHECK ((LWIP_DHCP)&&(LWIP_ARP)

//*************
////
--- UPnP 选项---
////
*****************
//#define LWIP_UPnP 0

//*****************
////
--- PTPD 选项---
////
*****************
//#define LWIP_PTPD 0

//*****************
////
--- AutoIP 选项---
////
*****************
#define LWIP_AUTOIP 1 //默认为0
#define LWIP_DHCP_AUTOIP_COOP ((LWIP_DHCP)&&(LWIP_AUTOIP)
//默认为0
#define LWIP_DHCP_AUTOIP_COOP_TESes 5. //默认值为9

//*********
////
--- SNMP 选项--------
////
*****************
#define LWIP_SNMP 1 // 0
#define SNMP_ANOND_Requests 1
#define SNMP_TRAP_Destinations 1
#define SNMP_PRIVE_MIB 0
#define SNMP_SAFE_Requests 1

/*************
////
--- IGMP 选项--------------------------------------------------------
////
*****************
//#define LWIP_IGMP 0

//*****************
////
--- DNS 选项--------------------------------------------------------
////
*****************
#define LWIP_DNS 0
#define DNS_TABLE 大小 4
#define DNS_MAX_NAME_LENGTH 256
#define DNS_MAX_SERVERS 2
#define DNS_Does_name_check 1
#define DNS_USS_STATUS_BUF 1
#define DNS_MSG_SIZE 512

//*********
////
--- UDP 选项---
////
*****************
#define LWIP_UDP 1
//#define LWIP_UDPLITE 0
//#define UDP_TTL (IP_DEFAULT_TTL)

//*********
////
--- TCP 选项---------
////
*****************
#define LWIP_TCP 1
//#define tcp_TTL (IP_DEFAULT_TTL)
#define tcp_WND 4096 //默认值为2048
//#define tcp_MAXTX 12
//#define tcp_SYNMAXRTX 6
//#define tcp_queue_OOSEQ 1
#define tcp_mss 1500 //默认为128
//#define tcp_calculate_EFF_send_MSS 1
#define tcp_snd_BUF (4 * tcp_mss)
//默认为256,为6 *
//#define tcp_snd_QUEUELEN (4 *(tcp_snd_BUF/tcp_MSS)//#define
tcp_snmOWAT (tcp_snd_BUF/2)
//#define tcp_listen_backlog 0
//#define tcp_default_listen_backlog 0xFF

//*********
////
--- API 选项---
////
*****************
//#define LWIP_EVENT_API 0
//#define LWIP_callback_API 1

/*************
////
--- Pbuf 选项---
////
*****************
#define PBUF_LINK_HLEN 16. //默认为14
#define PBUF_POOL_BUFSIZE 512
//默认为 LWIP_MEM_ALIGN_SIZE (tcp_MSS+40+PBUF_LINK_HLEN)
#define ETH_PAD_SIZE 0 //默认值为0

//*************
////
--- 网络接口选项---------
////
*****************
//#define LWIP_NETIF_HOSTNAME 0
//#define LWIP_NETIF_API 0
//#define LWIP_NETIF_STATUS_CALLACK 0
//#define LWIP_NETIF_LINK_REACLK 0
//#define LWIP_NETIF_HWADDRHINT 0

//*****************
////
--- LOOPIF 选项---
////
*****************
//#define LWIP_HASE_LOOPIF 0
//#define LWIP_LOOPIF_MULTITIPE 1

/*************
////
--- 线程选项--------------------------------------------------------
////
*****************
#define TCPIP_thread_name "TCPIP"
#define TCPIP_thread_STACKSIZE 2048
#define TCPIP_thread_PRIO 14
#define TCPIP_MBOX_SIZE 32
//#define SLIPIF_thread_name "slipif_loop"
//#define SLIPIF_thread_STACKSIZE 0
//#define SLIPIF_thread_PRIO 1
//#define ppp_thread_name "pppMain"
//#define PPP_thread_STACKSIZE 0
//#define PPP_thread_PRIO 1
//#define DEFAULT_THREAD_NAME "lwIP"
//#define DEFAULT_THREAD_STACKSIZE 0
//#define DEFAULT_THREAD_PRIO 1
//#define DEFAULT_RAW_RECVMBOX_SIZE 0
//#define DEFAULT_UDP_RECVMBOX_SIZE 0
//#define DEFAULT_tcp_RECVMBOX_SIZE 0
//#define DEFAULT_ACCEPPTMBOX_SIZE 0

//*****************
////
--- 顺序图层选项---
////
*****************
//#define LWIP_TCPIP_CORE_LOCK_LOCING 0
#define LWIP_NETCONN 0 //默认值为1

//*********
////
--- 套接字选项---
////
*****************
#define LWIP_SOCKET 0 //默认为1
//#define LWIP_COMPAT_Sockets 1
//#define LWIP_POSIX_Sockets _IO_Names 1
//#define LWIP_tcp_keepalive 0
//#define LWIP_SO_RCVTIMEO 0
//#define LWIP_SO_RCVBUF 0
//#define SO_reuse 0

//*****************
////
--- 统计选项---
////
*****************
//#define LWIP_STATS 1
//#define LWIP_STATS_DISPLAY 1//0
//#define LINK_STATS 1
//#define ETHARP_STATS (LWIP_ARP)
//#define IP_STATS 1
//#define IPFRAG_STATS (IP_RELEGECTING|| IP_FRAG)
//#define ICMP_STATS 1
//#define IGMP_STATS (LWIP_IGMP)
//#define UDP_STATS (LWIP_UDP)
//#define tcp_stats (LWIP_TCP)
//#define MEM_STATS 1
//#define MEMP_STATS 1
//#define SYS_STATS 1

/*************
////
--- PPP 选项--------------------------------------------------------
////
*****************
//#define ppp_support 0
//#define PPPoE_support 0
//#define PPPOS_support ppp_support

#if ppp_support
//#define NUM_PPP 1
//#define PAP_SUPPT助 0
//#define CHAP_support 0
//#define MSCHAP_support 0
//#define CBCP_support 0
//#define CCP_support 0
//#define VJ_support 0
//#define MD5_support 0
//#define FSM_DEFTIMEOUT 6
//#define FSM_DEFMAXTERMREQS 2
//#define FSM_DEFMAXCONFREQS 10
//#define FSM_DEFMAXNAKLOOPS 5
//#define UPAP_DEFTIMEOUT 6
//#define UPAP_DEFREQTIME 30
//#define CHAP_DEFTIMEOUT 6
//#define CHAP_DEFTRANSMITS 10
//#define LCP_ECHOINTERVAL 0
//#define LCP_MAXCHOFAILS 3
//#define PPP_MAXIDLEFLAG 100

//#define PPP_MAXMTU 1500
//#define PPP_DEFMRU 296
#endif

//*********
////
--- 校验和选项----------------------------------------------------
////
*****************
#define CHECKSUM_GEN_IP 0
#define CHECKSUM_GEN_ICMP 0
#define CHECKSUM_GEN_UDP 0
#define CHECKSUM_GEN_TCP 0
#define CHECKSUM_CHECK_IP 0
#define CHECKSUM_CHECK_UDP 0
#define CHECKSUM_CHECK_TCP 0

//*****************
////
--- 调试选项---
////
*****************
#if 1/_def 调试
#define U8_F"c"
#define S8_F"c"
#define X8_F"02x"
#define U16_F"u"
#define S16_F"d"
#define DIAX16_F"x"
#define U32_F"u"
#define S32_F "d"#define UARTX32_F "u"
#define

IP void (void)#define Ulwlwg_F!#define IP!
\
UARTprintf ("在%s 的%d 行中断言失败:%s\n"、__LINE__、__FILE__、msg)
#define LWIP_DEBUG 1
#endif

//#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_OFF
//#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_OFF
//#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_WARNING
#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_SEARGD/#define
LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_SEVERE

//#define LWIP_DBG_Types_on LWIP_DBG_ON
//#define LWIP_DBG_Types_on (LWIP_DBG_ON|LWIP_DBG_TRACE| \
LWIP_DBG_State|LWIP_DBG_FRESH)

//#define ETHARP_DEBUG LWIP_DBG_ON //默认为 off
#define NETIF_DEBUG LWIP_DBG_OFF
//#define PBUF_DEBUG LWIP_DBG_OFF
//#define API_LIB_DEBUG LWIP_DBG_OFF
//#define API_MSG_DEBUG LWIP_DBG_OFF
//#define SOCKETS_DEBUG LWIP_DBG_OFF
#define HTTPD_DEBUG LWIP_DBG_OFF
//#define ICMP_DEBUG LWIP_DBG_OFF
//#define IGMP_DEBUG LWIP_DBG_OFF
//#define iNet_debug LWIP_DBG_OFF
//#define IP_DEBUG LWIP_DBG_ON
//#define IP_REASS_DEBUG LWIP_DBG_OFF
#define RAW_DEBUG LWIP_DBG_OFF
#define MEM_DEBUG LWIP_DBG_ON
//#define MEMP_DEBUG LWIP_DBG_OFF
//#define SYS_DEBUG LWIP_DBG_OFF
//#define tcp_debug LWIP_DBG_ON
#define tcp_input_debug LWIP_DBG_ON
//#define tcp_FR_DEBUG LWIP_DBG_OFF
//#define tcp_RTO 调试 LWIP_DBG_OFF
//#define tcp_CWND_DEBUG LWIP_DBG_OFF
//#define tcp_WND_DEBUG LWIP_DBG_OFF
#define tcp_output_debug LWIP_DBG_ON
//#define tcp_RST_DEBUG LWIP_DBG_OFF
//#define tcp_QLEN_DEBUG LWIP_DBG_OFF
//#define UDP_DEBUG LWIP_DBG_ON //默认为 off
//#define TCPIP_DEBUG LWIP_DBG_ON
//#define PPP_DEBUG LWIP_DBG_OFF
//#define SLIT_DEBUG LWIP_DBG_OFF
//#define DHCP_DEBUG LWIP_DBG_ON //默认为 off
//#define AUTOIP_DEBUG LWIP_DBG_OFF
//#define SNMP_MSG_DEBUG LWIP_DBG_OFF
//#define SNMP_MIB_DEBUG LWIP_DBG_OFF
//#define DNS_DEBUG LWIP_DBG_OFF


//错误定义
#define LWIP_Provide_errno1
#define LWIP_COMPAT_mutex_allowed1

//以太网接口功能启用定义
#define HTTP_ENABLE_PASSWORD1
#define HTTP_ENABLE_Session_TIMEOUT1

#endif // 

如何解决此问题?

谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Leonan、您好!

    我想知道您是否需要在 lwip 端为在 html 中创建的 SSI 标签创建处理程序? 我需要将您的帖子分配给我们的 SME 以获得进一步帮助。

    coherentmusings.wordpress.com/.../
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Charles、

    我在 LWIP 上配置了 SSI 标签处理程序。 这是完美的。


    服务器中出现错误。 即使我禁用了 SSI 标签、它也会完全停止工作。

    当错误发生时、系统进入故障 ISR、但有时仅服务器停止、FreeRTOS 中的其他任务正常工作。

    我认为它是 LWIP 中的内存错误。 我使用2.0.0版本

    谢谢
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Leonan、您好!

    请参阅文件夹"./examples/boards/dk-tm4c129x 中的"FreeRTOS_DEMO"。 它使用 FreeRTOS 上运行的 lwIP 和 HTTP 服务器。

    由于该示例是为 DK-TM4C129X 板创建的、因此在 EK-TM4C1294XL 板上不会开箱即用、但对于将 lwIP 与 FreeRTOS 配合使用而言、这是一个很好的参考项目。

    谢谢、
    SAI
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Sai

    我与 Leonan 一起工作。 我们在设置 SSI 标签使 lwIP 与 FreeRTOS 配合使用时不会遇到任何问题。

    HTTP 服务器、SSI 标签和 CGI 处理程序运行良好。 唯一的问题是、如果应用程序保持运行一段时间、它将进入 FaultISR。如果我们将网页设置为每"x"秒刷新一次、则代码为我们提供 FaultISR 的时间会严重缩短(从几个小时减少到~5到10分钟)。 但是、如果我们禁用刷新、FaultISR 在更长时间后仍会发生。

    我们的应用程序使用 FreeRTOS 来计划不同的任务。 如果我们禁用负责 lwIP 的任务、FaultISR 将不会发生、即使执行一周的非停止也是如此(我们测试了这种情况)。 这使我们认为问题必须是 lwIP 执行的时间"太长"。

    我们还在 Tivaware (enet_IO)的另一个示例上进行了测试、修改后每1秒刷新一次网页、但其余部分保持不变。 我们有相同的行为、因此我认为问题不是由我们代码的某些特定原因引起的。

    我们想知道这个问题是否不是由库中的内存泄漏引起的。 我们在论坛上看到了一些关于与此相关的类似问题的主题:

    https://e2e.ti.com/support/microcontrollers/tiva_arm/f/908/p/450416/1626644

    https://e2e.ti.com/support/microcontrollers/tiva_arm/f/908/t/417592?tisearch=e2e-quicksearch&keymatch=lwip%20memory%20leak

    不幸的是,没有一个国家能够解决我们的问题。

    我们如何确认或否认我们的怀疑?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我在这里的 enet_io 上尝试过相同的标签、我遇到了同样的问题。  

    在最新版本的 Tivaware 上、TM4C 器件上的内存泄漏似乎没有得到解决。

    这是一个非常大的问题、因为无物理层以太网连接是 TM4C129x 器件的卖点。

    我衷心希望德州工程师能够解决这个问题  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Sai、

    我根据 FreeRTOS_DEMO 示例创建了项目、并对其进行了必要的修改、使其与 TM4C1294ncpdt 器件兼容。

    我们基于 enet_io 示例测试了不带 FreeRTOS 的 LWIP、但问题仍然存在。


    当我尝试增加这个项目的堆大小时、故障间隔时间也会增加。 现在大约需要20分钟。

    我们认为、如果出现此问题是因为 TM4C 器件上的 LWIP 内部存在内存泄漏。



    这是一个关键问题、在最新版本的 Tivaware 上未解决。

    我希望德州工程师能够解决这个问题。

    谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我终于解决了这个问题!

    阅读 lwip wiki (lwip.wikia.com/.../Tuning_TCP)、了解如何配置 TCP 协议的参数。

    宏 tcp_mss 是最大段大小、用于控制每个数据包的最大有效负载字节数量。

    tcp_wND 至少设置为2xtcp_mss、tcp_snd_BUF 等于 tcp_wND (以实现最大 吞吐量)。

    我将 lwipopts.h 修改为:

    //
    ////
    --- TCP 选项---------
    ////
    *****************
    #define LWIP_TCP 1
    //#define tcp_TTL (IP_DEFAULT_TTL)
    #define tcp_WND 256 //默认值为2048
    //#define tcp_MAXTX 12
    //#define tcp_SYNMAXRTX 6
    //#define tcp_queue_OOSEQ 1
    #define tcp_mss 128 //默认为128
    //#define tcp_calculate_EFF_send_MSS 1
    #define tcp_snd_BUF tcp_wND //默认值为(4 * tcp_mss)
    //#define tcp_snd_QUEUELEN (4 *(tcp_snd_BUF/tcp_MSS)//#define
    tcp_snmOWAT (tcp_snd_BUF/2)
    //#define tcp_listen_backlog 0
    //#define tcp_default_listen_backlog 0xFF 

    我 也将 TCPIP 线程的优先级修改为1、并将该线程的堆栈大小修改为1。

    //
    ////
    --- 线程选项--------------------------------------------------------
    ////
    *****************
    #define TCPIP_thread_name "TCPIP"
    #define TCPIP_thread_STACKSIZE 4096//为2048
    #define TCPIP_thread_PRIO 1/为14
    #define TCPIP_MBOX_SIZE 32 


  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    此主题应固定。 Tivaware 示例上的默认值与这些示例有很大不同、很难准确调试有问题的系统。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    还有一些其他重要细节需要解决与此问题相关的问题。

    在实现 LwIP 的 HTTP 服务器的文件 httpd.c 中、您可以找到以下行:

    #define HTTP_ALLOC_HTTP_STATE ()(struct http_state *) mem_malloc (sizeof (struct http_SSI_state)
    )#define HTTP_FREE_HTTP_STATE (x) mem_FREE (x)
    #if LWIP_HTTPD_SSI
    #define HTTP_ALLOC_SSI_STATE ()(x)(struct http_free_state_statut (x)
    ​

    但是、mim_malloc mem_free 方法是 LwIP 的标准存储器管理方法、它们不是线程安全的。
    最好将它们更改为对应的 FreeRTOS 线程安全:pvPortMalloc vPortFree

    生成的代码如下所示:

    #define HTTP_ALLOC_HTTP_STATE ()(struct http_state *) pvPortMalloc (sizeof (struct http_SSI_state)
    )#define HTTP_FREE_HTTP_STATE (x) vPortFree (x)
    #if LWIP_HTTPD_SSI
    #define HTTP_ALLOC_SSI_STATE ()(x_SAMPLE_STATE (x_STRUCT_SSI_STAT_x)#define
    (x_SSI_SSI_STATE)(struct (struct) vPortFree) ​​

     


    此外、请注意您正在使用的 FreeRTOS 的存储器管理实施。 根据他们的在线文档( http://www.freertos.org/a00111.html ),RTOS 源代码中包含5种不同的实现。 您可以在
    “Source/Cable/MemMang”文件夹中查看正在使用的是哪一个。 请注意、此文件夹中一次只能存在一个"heap_x.c"文件。

    如果使用实现编号1 (heap_1)、则不允许释放之前分配的内存、这可能会导致内存泄漏。

    当我使用实现编号4 (heap_4)进行测试时、问题似乎可以解决。