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.

[参考译文] AM2732:添加基于 lwip 的以太网框架后、会发生 MSS_L2存储器溢出问题

Guru**** 2478765 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1461524/am2732-when-the-ethernet-framework-based-on-lwip-is-added-the-mss_l2-memory-overflow-problem-occurs

器件型号:AM2732

工具与软件:

大家好、专家:
现在我有一个问题、当我将 mmwave_mcuplus_sdk_04_04_01_02\mcu_plus_sdk_am273x_08_05_00_24\examples\networking\lwip\enet_cpsw_udpserver 可以成功发送和接收数据时、我在 PPP 内存中将其 mwave_mcuplus_sdk_04_01_02_02\mmwave_demo\mmwave_demo 函数和其他内存屏幕截图中成功发送和接收数据。 如果我只需要 UDP 函数、并且没有对 udpserver 演示进行大量修改、我还可以做些什么来减少内存占用、以便我的项目可以编译

此致、

MZB

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

    这是我自行修改 lwipopts.h 头文件后的内存占用情况、请帮助我检查是否正确

    #ifndef LWIP_LWIPOPTS_H
    #define LWIP_LWIPOPTS_H
    
    #ifdef __cplusplus
    extern "C"
    {
    #endif
    
    #ifdef LWIP_OPTTEST_FILE
    #include "lwipopts_test.h"
    #else /* LWIP_OPTTEST_FILE */
    #include "lwipopts_os.h"
    #endif
    #define LWIP_IPV4                  1    // Enable IPv4
    #define LWIP_IPV6                  0    // Disable IPv6
    
    #define LWIP_SOCKET                (NO_SYS==0)  // Enable lwIP socket support
    #define LWIP_NETCONN               (NO_SYS==0)  // Enable lwIP netconn API support
    #define LWIP_NETIF_API             (NO_SYS==0)  // Enable netif API
    
    // Disable options related to TCP and other protocols
    #define LWIP_TCP                   0    // Disable TCP
    #define LWIP_ICMP                  0    // Disable ICMP
    #define LWIP_IGMP                  0    // Disable IGMP
    #define LWIP_DNS                   0    // Disable DNS
    #define LWIP_MDNS_RESPONDER        0    // Disable mDNS
    #define LWIP_ARP                   1    // Enable ARP
    
    // Enable UDP
    #define LWIP_UDP                   1    // Enable UDP
    #define LWIP_UDPLITE               LWIP_UDP  // Enable UDPLITE
    
    #define UDP_TTL                    255  // Set UDP TTL (Time-to-Live)
    
    /* Memory options configuration */
    #define MEM_ALIGNMENT              32U    // Set memory alignment
    #define MEM_USE_POOLS              1     // Enable memory pools
    #define MEMP_USE_CUSTOM_POOLS      1     // Use custom memory pools
    
    #define PBUF_POOL_BUFSIZE          1536  // Set pbuf pool size
    
    /* Other memory pool configurations */
    #define MEMP_NUM_PBUF              128
    #define MEMP_NUM_UDP_PCB           4
    #define MEMP_NUM_TCPIP_MSG_API     128
    #define MEMP_NUM_TCPIP_MSG_INPKT   128
    
    /* ---------- Thread and synchronization options ---------- */
    #define SYS_LIGHTWEIGHT_PROT       0  // Disable lightweight protection
    
    /* ---------- TCP/IP configuration ---------- */
    #define TCPIP_THREAD_STACKSIZE     (8 * 1024)  // TCP/IP thread stack size
    #define DEFAULT_THREAD_STACKSIZE   (5 * 1024)  // Default thread stack size
    
    /* ---------- UDP receive queue size ---------- */
    #define DEFAULT_UDP_RECVMBOX_SIZE  320  // Set UDP receive queue size
    
    /* ----------- Debug options ----------- */
    #define LWIP_DEBUG                 0   // Disable debug output
    #define LWIP_DBG_T                  LWIP_DBG_OFF  // Disable debugging
    
    #define LWIP_NETIF_LINK_CALLBACK        1
    #define LWIP_NETIF_STATUS_CALLBACK      1
    #define LWIP_NETIF_EXT_STATUS_CALLBACK  1
    
    #ifdef __cplusplus
    }
    #endif
    
    #endif/* LWIP_LWIPOPTS_H */
    

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

    此外,我屏蔽了在 makefile 中不需要的 FTP 服务、mqqt 和其他源文件的编译,以及为什么图中出现错误,这让我感到困惑。 我注意到这些服务也会影响内存,这是问题的关键

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

    在不更改原始 UDP 服务器演示代码的情况下、我修改了 makefile 和 lwipopts.h 标头以获得图中所示的内存优化。  是否有任何方法可以进一步优化 MSS_L2的存储器使用

    #
    # Auto generated makefile
    #
    
    export MCU_PLUS_SDK_PATH?=$(abspath ../../..)
    include $(MCU_PLUS_SDK_PATH)/imports.mak
    
    CG_TOOL_ROOT=$(CGT_TI_ARM_CLANG_PATH)
    
    CC=$(CGT_TI_ARM_CLANG_PATH)/bin/tiarmclang
    AR=$(CGT_TI_ARM_CLANG_PATH)/bin/tiarmar
    
    PROFILE?=debug
    ConfigName:=$(PROFILE)
    
    LIBNAME:=lwip-freertos.am273x.r5f.ti-arm-clang.$(PROFILE).lib
    
    FILES_common := \
        init.c \
    	def.c \
        inet_chksum.c \
        ip.c \
        mem.c \
        memp.c \
        netif.c \
        pbuf.c \
        raw.c \
        netbuf.c \
        err.c \
        tcpip.c \
        stats.c \
        api_lib.c \
    	api_msg.c \
        sys.c \
        timeouts.c \
        udp.c \
        etharp.c \
        ip4.c \
        ip4_addr.c \
        ip4_frag.c \
        ethernet.c \
        sys_arch.c \
    
    
    FILES_PATH_common = \
        ${MCU_PLUS_SDK_PATH}/source/networking/lwip/lwip-stack/src/apps/smtp \
        ${MCU_PLUS_SDK_PATH}/source/networking/lwip/lwip-stack/src/apps/tftp \
        ${MCU_PLUS_SDK_PATH}/source/networking/lwip/lwip-stack/src/apps/mqtt \
        ${MCU_PLUS_SDK_PATH}/source/networking/lwip/lwip-stack/src/apps/tftp \
        ${MCU_PLUS_SDK_PATH}/source/networking/lwip/lwip-stack/src/apps/netbiosns \
        ${MCU_PLUS_SDK_PATH}/source/networking/lwip/lwip-stack/src/apps/mdns \
        ${MCU_PLUS_SDK_PATH}/source/networking/lwip/lwip-stack/src/apps/altcp_tls \
        ${MCU_PLUS_SDK_PATH}/source/networking/lwip/lwip-stack/src/apps/http \
        ${MCU_PLUS_SDK_PATH}/source/networking/lwip/lwip-stack/src/apps/http/makefsdata \
        ${MCU_PLUS_SDK_PATH}/source/networking/lwip/lwip-stack/src/apps/lwiperf \
        ${MCU_PLUS_SDK_PATH}/source/networking/lwip/lwip-stack/src/apps/snmp \
        ${MCU_PLUS_SDK_PATH}/source/networking/lwip/lwip-stack/src/apps/sntp \
        ${MCU_PLUS_SDK_PATH}/source/networking/lwip/lwip-stack/src/netif \
        ${MCU_PLUS_SDK_PATH}/source/networking/lwip/lwip-stack/src/netif/ppp \
        ${MCU_PLUS_SDK_PATH}/source/networking/lwip/lwip-stack/src/netif/ppp/polarssl \
        ${MCU_PLUS_SDK_PATH}/source/networking/lwip/lwip-stack/src/core \
        ${MCU_PLUS_SDK_PATH}/source/networking/lwip/lwip-stack/src/core/ipv6 \
        ${MCU_PLUS_SDK_PATH}/source/networking/lwip/lwip-stack/src/core/ipv4 \
        ${MCU_PLUS_SDK_PATH}/source/networking/lwip/lwip-stack/src/api \
        ${MCU_PLUS_SDK_PATH}/source/networking/lwip/lwip-port/freertos/src \
    
    INCLUDES_common := \
        -I${CG_TOOL_ROOT}/include/c \
        -I${MCU_PLUS_SDK_PATH}/source \
        -I${MCU_PLUS_SDK_PATH}/source/networking/lwip/lwip-stack/src/include \
        -I${MCU_PLUS_SDK_PATH}/source/networking/lwip/lwip-port/include \
        -I${MCU_PLUS_SDK_PATH}/source/networking/lwip/lwip-port/freertos/include \
        -I${MCU_PLUS_SDK_PATH}/source/kernel/freertos/FreeRTOS-Kernel/include \
        -I${MCU_PLUS_SDK_PATH}/source/kernel/freertos/portable/TI_ARM_CLANG/ARM_CR5F \
        -I${MCU_PLUS_SDK_PATH}/source/networking/lwip/lwip-config/am273x \
        -I${MCU_PLUS_SDK_PATH}/source/kernel/freertos/config/am273x/r5f \
    
    DEFINES_common := \
        -DSOC_AM273X \
    
    CFLAGS_common := \
        -mcpu=cortex-r5 \
        -mfloat-abi=hard \
        -mfpu=vfpv3-d16 \
        -mthumb \
        -Wall \
        -Werror \
        -g \
        -Wno-gnu-variable-sized-type-not-at-end \
        -Wno-unused-function \
        -Wno-extra \
        -Wvisibility \
        -fno-strict-aliasing \
    
    CFLAGS_release := \
        -Os \
        -Oz \
        -flto \
    
    CFLAGS_cpp_common := \
        -Wno-c99-designator \
        -Wno-extern-c-compat \
        -Wno-c++11-narrowing \
        -Wno-reorder-init-list \
        -Wno-deprecated-register \
        -Wno-writable-strings \
        -Wno-enum-compare \
        -Wno-reserved-user-defined-literal \
        -Wno-unused-const-variable \
        -x c++ \
    
    CFLAGS_debug := \
        -D_DEBUG_=1 \
    
    ARFLAGS_common := \
        rc \
    
    FILES := $(FILES_common) $(FILES_$(PROFILE))
    ASMFILES := $(ASMFILES_common) $(ASMFILES_$(PROFILE))
    FILES_PATH := $(FILES_PATH_common) $(FILES_PATH_$(PROFILE))
    CFLAGS := $(CFLAGS_common) $(CFLAGS_$(PROFILE))
    ASMFLAGS := $(CFLAGS_common) $(CFLAGS_$(PROFILE))
    ifeq ($(CPLUSPLUS_BUILD), yes)
    CFLAGS += $(CFLAGS_cpp_common)
    endif
    DEFINES := $(DEFINES_common) $(DEFINES_$(PROFILE))
    INCLUDES := $(INCLUDES_common) $(INCLUDE_$(PROFILE))
    ARFLAGS := $(ARFLAGS_common) $(ARFLAGS_$(PROFILE))
    
    LIBDIR := lib
    OBJDIR := obj/am273x/ti-arm-clang/$(PROFILE)/r5f/lwip-freertos/
    OBJS := $(FILES:%.c=%.obj)
    OBJS += $(ASMFILES:%.S=%.obj)
    DEPS := $(FILES:%.c=%.d)
    
    vpath %.obj $(OBJDIR)
    vpath %.c $(FILES_PATH)
    vpath %.S $(FILES_PATH)
    
    $(OBJDIR)/%.obj %.obj: %.c
    	@echo  Compiling: $(LIBNAME): $<
    	$(CC) -c $(CFLAGS) $(INCLUDES) $(DEFINES) -MMD -o $(OBJDIR)/$@ $<
    
    $(OBJDIR)/%.obj %.obj: %.S
    	@echo  Compiling: $(LIBNAME): $<
    	$(CC) -c $(ASMFLAGS) -o $(OBJDIR)/$@ $<
    
    all:clean $(LIBDIR)/$(LIBNAME)
    
    $(LIBDIR)/$(LIBNAME): $(OBJS) | $(LIBDIR)
    	@echo  .
    	@echo  Archiving: $(LIBNAME) to $@ ...
    	$(AR) $(ARFLAGS) $@ $(addprefix $(OBJDIR), $(OBJS))
    	@echo  Archiving: $(LIBNAME) Done !!!
    	@echo  .
    
    clean:
    	@echo  Cleaning: $(LIBNAME) ...
    	$(RMDIR) $(OBJDIR)
    	$(RM) $(LIBDIR)/$(LIBNAME)
    
    scrub:
    	@echo  Scrubing: $(LIBNAME) ...
    	-$(RMDIR) obj/
    	-$(RMDIR) lib/
    
    $(OBJS): | $(OBJDIR)
    
    $(LIBDIR) $(OBJDIR):
    	$(MKDIR) $@
    
    -include $(addprefix $(OBJDIR)/, $(DEPS))
    
    #ifndef LWIP_LWIPOPTS_H
    #define LWIP_LWIPOPTS_H
    
    #ifdef __cplusplus
    extern "C"
    {
    #endif
    
    #ifdef LWIP_OPTTEST_FILE
    #include "lwipopts_test.h"
    #else /* LWIP_OPTTEST_FILE */
    #include "lwipopts_os.h"
    #endif
    
    #define LWIP_IPV4                  1    // Enable IPv4
    #define LWIP_IPV6                  0    // Disable IPv6
    
    #define LWIP_SOCKET                0    // Disable lwIP socket support
    #define LWIP_NETCONN               (NO_SYS==0)  // Enable lwIP netconn API support
    #define LWIP_NETIF_API             (NO_SYS==0)  // Enable netif API
    
    // Disable options related to TCP and other protocols
    #define LWIP_TCP                   0    // Disable TCP
    #define LWIP_ICMP                  0    // Disable ICMP
    #define LWIP_IGMP                  0    // Disable IGMP
    #define LWIP_DNS                   0    // Disable DNS
    #define LWIP_MDNS_RESPONDER        0    // Disable mDNS
    #define LWIP_ARP                   1    // Enable ARP
    
    // Enable UDP
    #define LWIP_UDP                   1    // Enable UDP
    #define LWIP_UDPLITE               LWIP_UDP  // Enable UDPLITE
    
    #define UDP_TTL                    255  // Set UDP TTL
    
    /* Memory options configuration */
    #define MEM_ALIGNMENT              4U    // Set memory alignment
    #define MEM_USE_POOLS              1     // Enable memory pools
    #define MEMP_USE_CUSTOM_POOLS      1     // Use custom memory pools
    
    #define PBUF_POOL_BUFSIZE          1536  // Set pbuf pool size
    
    /* Other memory pool configurations */
    #define MEMP_NUM_PBUF              128
    #define MEMP_NUM_UDP_PCB           4
    #define MEMP_NUM_TCPIP_MSG_API     128
    #define MEMP_NUM_TCPIP_MSG_INPKT   128
    #define MEMP_NUM_RAW_PCB           0
    #define MEMP_NUM_TCP_PCB           0
    #define MEMP_NUM_TCP_PCB_LISTEN    0
    #define MEMP_NUM_TCP_SEG           0
    
    /* ---------- Thread and synchronization options ---------- */
    #define SYS_LIGHTWEIGHT_PROT       0  // Disable lightweight protection
    
    /* ---------- TCP/IP stack configuration ---------- */
    #define TCPIP_THREAD_STACKSIZE     (8 * 1024)  // TCP/IP thread stack size
    #define DEFAULT_THREAD_STACKSIZE   (5 * 1024)  // Default thread stack size
    
    /* ---------- UDP receive mailbox size ---------- */
    #define DEFAULT_UDP_RECVMBOX_SIZE  320  // Set UDP receive mailbox size
    
    /* ---------- Debug options ---------- */
    #define LWIP_DEBUG                 0   // Disable debug output
    #define LWIP_DBG_T                 LWIP_DBG_OFF  // Disable debug
    
    #define LWIP_NETIF_LINK_CALLBACK        1
    #define LWIP_NETIF_STATUS_CALLBACK      1
    #define LWIP_NETIF_EXT_STATUS_CALLBACK  1
    
    #ifdef __cplusplus
    }
    #endif
    
    #endif /* LWIP_LWIPOPTS_H */