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:AM2732:添加基于 lwip 的以太网框架时、会发生 MSS_L2存储器溢出问题

Guru**** 2461010 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1462040/am2732-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 演示进行大量修改、我还可以做些什么来减少内存占用、以便我的项目可以编译

在不更改原始 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 */

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

    您好、里程数:  

    让我看看我是否能找到合适的专家来帮助您解决这个问题。  

    谢谢!

    -Randy

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

    您好、Randy、

    在这个问题上是否有任何进展?

    谢谢!

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

    您好、Meng、

     您能否在 linker.cmd 文件中增加 L2内存。

    此致、
    Pradeep

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

    Pradeep、您好!

    我该怎么办?

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

    Pradeep、您好!

    我在 mmw_mss_linker.cmd 文件中修改了它。 修改后的内容如下所示。  

    /*----------------------------------------------------------------------------*/
    /* Linker Settings                                                            */
    /*--retain="*(.intvecs)"*/
    
    /*----------------------------------------------------------------------------*/
    /* Section Configuration                                                      */
    SECTIONS
    {
        systemHeap :  {} > SBL_RESERVED_L2_RAM | MSS_L2
        .demoSharedMem: { } >> DSS_L3
        .l3ram: { } >> DSS_L3
    }
    /*----------------------------------------------------------------------------*/
    /* Memory Configuration                                                      */
    MEMORY
    {
        L2_RAM : origin = 0x00800000, length = 0x00800000  /* 5120 KB */
    }
    /*----------------------------------------------------------------------------*/
    

    是这样吗?

    谢谢!

    -Meng

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

    尊敬的 Meng:

    如果您能够构建项目、那么您便成功地为链接器中的 L2分配了更多存储器空间。 通常、我们会在 SDK 工程的链接器命令文件底部看到以下部分:  

    这是可以进行此类修改的地方。

    完成这些更改后、您是否仍然看到程序无法放入可用内存错误?  

    此致!

    Daniel

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

    亲爱的  Daniel:

    我尝试修改这部分,并查找手册,它最多只能设置为960KB,但它仍然没有解决问题

    还有其他解决方案吗?

    思考!

    -Meng

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

    尊敬的 Meng:

    您是否有可能共享您的项目? 我想尝试复制您看到的问题。

    另一个问题。 您说过在尝试将工程从   mcu_plus_sdk_am273x_08_05_00_24移植到 mmwave_mcuplus_sdk_04_04_01_02时会出现该问题、对吗? 这是否意味着更新程度更高的 SDK 中的工程会生成一个可正常工作的链接器文件? 您能否抓取它并将其移植到尝试构建的项目中?  

    此致!

    Daniel  

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

    我提到过的两个 SDK 已从 mmwave_mcuplus_sdk_04_04_00_01-Windows-x86-Install.exe 安装

    他们都应在 C:\ti\mmwave_mcuplus_sdk_04_04_01_02\mmwave_mcuplus_sdk_04_04_01_02\ti\platform\am273x 中共享 r5f_linker.cmd、对吗?

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

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

    尊敬的 Meng:

    重新安装后、我可以看到您现在讨论的两个项目。 我不确定您将  mcu_plus_sdk_am273x_08_05_00_24\examples\networking\lwip\enet_cpsw_udpserver 示例"移植到 mmwave_mcuplus_sdk_04_04_01_02\ti\demo\am273x\mmw 时 的含义。 这是两个不同的工程、它们位于两个不同的 API 包中、它们没有共享同一个 r5F_linker.cmd。 r5f_linker.cmd 在 mmw 文件夹中的演示项目之间共享、但不用于 mcu_plus_sdk 中的 UDP 服务器示例项目、这一个使用中的 linker.cmd 文件  mmwave_mcuplus_sdk_04_04_00_01\mcu_plus_sdk_am273x_08_05_00_24\examples\networking\lwip\enet_cpsw_udpserver\am273x-evm\r5fss0-0_freertos\ti-arm-clang

    我随附一份 html 格式的链接器之间的比较报告、如果您无法打开该报告、请告诉我:

    e2e.ti.com/.../LinkerComparisonReport.html

    考虑到这一点:

    • 您能告诉我将 mcu_plus_sdk upserver 项目"移植到 mmw 演示中所执行的步骤吗? 我还在努力复制自己的数据。
    • 此外、您可以随意从上述示例路径中获取"正在工作"linker.cmd 文件并将 r5f_linker.cmd 替换为、或者尝试将存储器组织与正在工作的组织匹配起来、看看这是否会对构建造成任何差异。 我假设演示的总体规模较大、因此无论如何、我都不希望简单的副本不会在不进行额外修改的情况下正常工作。 但是,如果你能帮我复制,我将能够理解问题来自哪里更好

    此致!

    Daniel

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

    我提到这个帖子

    e2e.ti.com/.../am2732-modify-the-makefile-to-add-enet-support-using-the-two-chip-cascaded-sdk

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

    尊敬的 Meng:

    引用的帖子不使用相同的软件包、包含与您尝试编译的代码不同的定义、您能否共享您修改的文件以便我可以在我这边运行? 上面的线程修改了 makefile 和.mak 文件、但如果您修改了任何其他内容、也请附加。

    您还能否说明一下、将 udpserver 示例从 MCU_PLUS_SDK 移植到毫米波演示中是什么意思?  

    此致!

    Daniel

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

    尊敬的 Meng:

     C:\ti\mmwave_mcuplus_sdk_04_04_01_02\mmwave_mcuplus_sdk_04_04_01_02\ti\platform\am273x 下应该有一个称为 r5f_linker.cmd 的链接器命令文件。

    看起来没有分配整个 L2空间。 您能否打开该文件并在第107行将 MSS_L2段的长度从0x000C8000更改为0x000F0000:

    完成后、请进行清理并尝试重新编译工程、额外分配的内存应该足以覆盖您之前遇到的错误。

    此致!

    Daniel