搜索
bottom↓
回复: 30

esp8266编译时怎样可以显示ram的使用情况?

[复制链接]

出45入88汤圆

发表于 2020-3-12 16:13:53 | 显示全部楼层 |阅读模式

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入4汤圆

发表于 2020-3-12 16:58:52 | 显示全部楼层
你用的啥编译器? 安信可的一体化IDE  ?

出45入88汤圆

 楼主| 发表于 2020-3-12 17:26:21 | 显示全部楼层
fbwcpu 发表于 2020-3-12 16:58
你用的啥编译器? 安信可的一体化IDE  ?

linux下用make命令编译。

出30入54汤圆

发表于 2020-3-12 17:29:32 | 显示全部楼层
data段和bss段的话可以用size工具来看,堆栈的动态使用只有运行起来才知道了

出45入88汤圆

 楼主| 发表于 2020-3-12 17:54:11 | 显示全部楼层
cloudboy 发表于 2020-3-12 17:29
data段和bss段的话可以用size工具来看,堆栈的动态使用只有运行起来才知道了 ...

我想要类似keil arm的编译信息:
Program Size: Code=18136 RO-data=436 RW-data=276 ZI-data=10724  

出30入54汤圆

发表于 2020-3-12 20:30:27 | 显示全部楼层
Edesigner. 发表于 2020-3-12 17:54
我想要类似keil arm的编译信息:
Program Size: Code=18136 RO-data=436 RW-data=276 ZI-data=10724   ...

应该可以修改makefile,在最终的elf目标生成后加上size $@应该就可以

出45入88汤圆

 楼主| 发表于 2020-3-12 21:40:48 | 显示全部楼层
cloudboy 发表于 2020-3-12 20:30
应该可以修改makefile,在最终的elf目标生成后加上size $@应该就可以

有教程吗?

出105入79汤圆

发表于 2020-3-12 23:34:06 | 显示全部楼层
gcc --objdump 可以看

出0入0汤圆

发表于 2020-3-12 23:37:28 | 显示全部楼层
或者直接
xtensa-lx106-elf-size xxx.elf

出30入54汤圆

发表于 2020-3-13 09:46:21 | 显示全部楼层
我看了一下官方ESP8266的RTOS_SDK的makefile,你可以在命令行下,执行make size就可以了
也可以执行make help看帮助看看所支持的命令
如果不行的话确认你的SDK是否是较新的

出45入88汤圆

 楼主| 发表于 2020-3-13 11:11:01 | 显示全部楼层
cloudboy 发表于 2020-3-13 09:46
我看了一下官方ESP8266的RTOS_SDK的makefile,你可以在命令行下,执行make size就可以了
也可以执行make he ...

SDK3.0来的:
make: *** No rule to make target `size'.  Stop.

出30入54汤圆

发表于 2020-3-13 13:41:56 | 显示全部楼层
Edesigner. 发表于 2020-3-13 11:11
SDK3.0来的:
make: *** No rule to make target `size'.  Stop.

你是不是执行在了错误的目录,我看了一下3.0.1的project.mak也是有size这个功能的
你可以自学一下makefile的相关知识

出45入88汤圆

 楼主| 发表于 2020-3-13 14:27:11 | 显示全部楼层
cloudboy 发表于 2020-3-13 13:41
你是不是执行在了错误的目录,我看了一下3.0.1的project.mak也是有size这个功能的
你可以自学一下makefil ...

#############################################################
# Required variables for each makefile
# Discard this section from all parent makefiles
# Expected variables (with automatic defaults):
#   CSRCS (all "C" files in the dir)
#   SUBDIRS (all subdirs with a Makefile)
#   GEN_LIBS - list of libs to be generated ()
#   GEN_IMAGES - list of object file images to be generated ()
#   GEN_BINS - list of binaries to be generated ()
#   COMPONENTS_xxx - a list of libs/objs in the form
#     subdir/lib to be extracted and rolled up into
#     a generated lib/image xxx.a ()
#
TARGET = eagle
#FLAVOR = release
FLAVOR = debug

#EXTRA_CCFLAGS += -u

ifndef PDIR # {
GEN_IMAGES= eagle.app.v6.out
GEN_BINS= eagle.app.v6.bin
SPECIAL_MKTARGETS=$(APP_MKTARGETS)
SUBDIRS=    \
        user    \
        driver

endif # } PDIR

APPDIR = .
LDDIR = ../ld

CCFLAGS += -Os

TARGET_LDFLAGS =                \
        -nostdlib                \
        -Wl,-EL \
        --longcalls \
        --text-section-literals

ifeq ($(FLAVOR),debug)
    TARGET_LDFLAGS += -g -O2
endif

ifeq ($(FLAVOR),release)
    TARGET_LDFLAGS += -g -O0
endif

COMPONENTS_eagle.app.v6 = \
        user/libuser.a  \
        driver/libdriver.a

LINKFLAGS_eagle.app.v6 = \
        -L../lib        \
        -nostdlib        \
    -T$(LD_FILE)   \
        -Wl,--no-check-sections        \
        -Wl,--gc-sections        \
    -u call_user_start        \
        -Wl,-static                                                \
        -Wl,--start-group                                        \
        -lc                                        \
        -lgcc                                        \
        -lhal                                        \
        -lphy        \
        -lpp        \
        -lnet80211        \
        -llwip        \
        -lwpa        \
        -lcrypto        \
        -lmain        \
        -ljson        \
        -lupgrade\
        -lssl        \
        -lpwm        \
        -lsmartconfig \
        $(DEP_LIBS_eagle.app.v6)                                        \
        -Wl,--end-group

DEPENDS_eagle.app.v6 = \
                $(LD_FILE) \
                $(LDDIR)/eagle.rom.addr.v6.ld

#############################################################
# Configuration i.e. compile options etc.
# Target specific stuff (defines etc.) goes in here!
# Generally values applying to a tree are captured in the
#   makefile at its root level - these are then overridden
#   for a subtree within the makefile rooted therein
#

#UNIVERSAL_TARGET_DEFINES =                \

# Other potential configuration flags include:
#        -DTXRX_TXBUF_DEBUG
#        -DTXRX_RXBUF_DEBUG
#        -DWLAN_CONFIG_CCX
CONFIGURATION_DEFINES =        -DICACHE_FLASH

DEFINES +=                                \
        $(UNIVERSAL_TARGET_DEFINES)        \
        $(CONFIGURATION_DEFINES)

DDEFINES +=                                \
        $(UNIVERSAL_TARGET_DEFINES)        \
        $(CONFIGURATION_DEFINES)


#############################################################
# Recursion Magic - Don't touch this!!
#
# Each subtree potentially has an include directory
#   corresponding to the common APIs applicable to modules
#   rooted at that subtree. Accordingly, the INCLUDE PATH
#   of a module can only contain the include directories up
#   its parent path, and not its siblings
#
# Required for each makefile to inherit from the parent
#

INCLUDES := $(INCLUDES) -I $(PDIR)include
PDIR := ../$(PDIR)
sinclude $(PDIR)Makefile

.PHONY: FORCE
FORCE:

出45入88汤圆

 楼主| 发表于 2020-3-13 14:27:44 | 显示全部楼层
笑笑我笑了 发表于 2020-3-12 23:37
或者直接
xtensa-lx106-elf-size xxx.elf

放在哪里执行?

出45入88汤圆

 楼主| 发表于 2020-3-13 14:28:16 | 显示全部楼层
qwe2231695 发表于 2020-3-12 23:34
gcc --objdump 可以看

不是直接用gcc编译

出30入54汤圆

发表于 2020-3-13 14:42:11 | 显示全部楼层
Edesigner. 发表于 2020-3-13 14:27
#############################################################
# Required variables for each makefi ...

这个只是子工程的makefile,不是真正实现elf目标编译的的makefile,要到SDK的make目录下找

出30入54汤圆

发表于 2020-3-13 14:42:57 | 显示全部楼层

理论上,size工具没有太大差异,你直接在命令行下,在生成的elf文件目录中直接执行size xxxx.elf就可以了

出45入88汤圆

 楼主| 发表于 2020-3-13 16:51:38 | 显示全部楼层
cloudboy 发表于 2020-3-13 14:42
这个只是子工程的makefile,不是真正实现elf目标编译的的makefile,要到SDK的make目录下找 ...

#  copyright (c) 2010 Espressif System
#
ifndef PDIR

endif

ifeq ($(COMPILE), gcc)
        AR = xtensa-lx106-elf-ar
        CC = xtensa-lx106-elf-gcc
        CXX = xtensa-lx106-elf-g++
        NM = xtensa-lx106-elf-nm
        CPP = xtensa-lx106-elf-cpp
        OBJCOPY = xtensa-lx106-elf-objcopy
        OBJDUMP = xtensa-lx106-elf-objdump
else
        AR = xt-ar
        CC = xt-xcc
        CXX = xt-xcc
        NM = xt-nm
        CPP = xt-cpp
        OBJCOPY = xt-objcopy
        OBJDUMP = xt-objdump
endif

BOOT?=none
APP?=0
SPI_SPEED?=40
SPI_MODE?=QIO
SPI_SIZE_MAP?=4

ifeq ($(BOOT), new)
    boot = new
else
    ifeq ($(BOOT), old)
        boot = old
    else
        boot = none
    endif
endif

ifeq ($(APP), 1)
    app = 1
else
    ifeq ($(APP), 2)
        app = 2
    else
        app = 0
    endif
endif

ifeq ($(SPI_SPEED), 26.7)
    freqdiv = 1
else
    ifeq ($(SPI_SPEED), 20)
        freqdiv = 2
    else
        ifeq ($(SPI_SPEED), 80)
            freqdiv = 15
        else
            freqdiv = 0
        endif
    endif
endif


ifeq ($(SPI_MODE), QOUT)
    mode = 1
else
    ifeq ($(SPI_MODE), DIO)
        mode = 2
    else
        ifeq ($(SPI_MODE), DOUT)
            mode = 3
        else
            mode = 0
        endif
    endif
endif

addr = 0x01000

ifeq ($(SPI_SIZE_MAP), 1)
  size_map = 1
  flash = 256
else
  ifeq ($(SPI_SIZE_MAP), 2)
    size_map = 2
    flash = 1024
    ifeq ($(app), 2)
      addr = 0x81000
    endif
  else
    ifeq ($(SPI_SIZE_MAP), 3)
      size_map = 3
      flash = 2048
      ifeq ($(app), 2)
        addr = 0x81000
      endif
    else
      ifeq ($(SPI_SIZE_MAP), 4)
        size_map = 4
        flash = 4096
        ifeq ($(app), 2)
          addr = 0x81000
        endif
      else
        ifeq ($(SPI_SIZE_MAP), 5)
          size_map = 5
          flash = 2048
          ifeq ($(app), 2)
            addr = 0x101000
          endif
        else
          ifeq ($(SPI_SIZE_MAP), 6)
            size_map = 6
            flash = 4096
            ifeq ($(app), 2)
              addr = 0x101000
            endif
          else
            ifeq ($(SPI_SIZE_MAP), 8)
              size_map = 8
              flash = 8192
              ifeq ($(app), 2)
                addr = 0x101000
              endif
            else
              ifeq ($(SPI_SIZE_MAP), 9)
                size_map = 9
                flash = 16384
                ifeq ($(app), 2)
                  addr = 0x101000
                endif
              else
                size_map = 0
                flash = 512
                ifeq ($(app), 2)
                addr = 0x41000
                endif
              endif
            endif
          endif
        endif
      endif
    endif
  endif
endif

LD_FILE = $(LDDIR)/eagle.app.v6.ld

ifneq ($(boot), none)
ifneq ($(app),0)
    ifneq ($(findstring $(size_map),  6  8  9),)
      LD_FILE = $(LDDIR)/eagle.app.v6.$(boot).2048.ld
    else
      ifeq ($(size_map), 5)
        LD_FILE = $(LDDIR)/eagle.app.v6.$(boot).2048.ld
      else
        ifeq ($(size_map), 4)
          LD_FILE = $(LDDIR)/eagle.app.v6.$(boot).1024.app$(app).ld
        else
          ifeq ($(size_map), 3)
            LD_FILE = $(LDDIR)/eagle.app.v6.$(boot).1024.app$(app).ld
          else
            ifeq ($(size_map), 2)
              LD_FILE = $(LDDIR)/eagle.app.v6.$(boot).1024.app$(app).ld
            else
              ifeq ($(size_map), 0)
                LD_FILE = $(LDDIR)/eagle.app.v6.$(boot).512.app$(app).ld
              endif
            endif
          endif
        endif
      endif
    endif
    BIN_NAME = user$(app).$(flash).$(boot).$(size_map)
endif
else
    app = 0
endif

CSRCS ?= $(wildcard *.c)
CXXSRCS ?= $(wildcard *.cpp)
ASRCs ?= $(wildcard *.s)
ASRCS ?= $(wildcard *.S)
SUBDIRS ?= $(patsubst %/,%,$(dir $(wildcard */Makefile)))

ODIR := .output
OBJODIR := $(ODIR)/$(TARGET)/$(FLAVOR)/obj

OBJS := $(CSRCS:%.c=$(OBJODIR)/%.o) \
        $(CXXSRCS:%.cpp=$(OBJODIR)/%.o) \
        $(ASRCs:%.s=$(OBJODIR)/%.o) \
        $(ASRCS:%.S=$(OBJODIR)/%.o)

DEPS := $(CSRCS:%.c=$(OBJODIR)/%.d) \
        $(CXXSCRS:%.cpp=$(OBJODIR)/%.d) \
        $(ASRCs:%.s=$(OBJODIR)/%.d) \
        $(ASRCS:%.S=$(OBJODIR)/%.d)

LIBODIR := $(ODIR)/$(TARGET)/$(FLAVOR)/lib
OLIBS := $(GEN_LIBS:%=$(LIBODIR)/%)

IMAGEODIR := $(ODIR)/$(TARGET)/$(FLAVOR)/image
OIMAGES := $(GEN_IMAGES:%=$(IMAGEODIR)/%)

BINODIR := $(ODIR)/$(TARGET)/$(FLAVOR)/bin
OBINS := $(GEN_BINS:%=$(BINODIR)/%)

CCFLAGS +=                         \
        -g                        \
        -Wpointer-arith                \
        -Wundef                        \
        -Werror                        \
        -Wl,-EL                        \
        -fno-inline-functions        \
        -nostdlib       \
        -mlongcalls        \
        -mtext-section-literals \
        -ffunction-sections \
        -fdata-sections        \
        -fno-builtin-printf
#        -Wall                       

DEFINES += -DSPI_FLASH_SIZE_MAP=$(size_map)
CFLAGS = $(CCFLAGS) $(DEFINES) $(EXTRA_CCFLAGS) $(INCLUDES)
DFLAGS = $(CCFLAGS) $(DDEFINES) $(EXTRA_CCFLAGS) $(INCLUDES)


#############################################################
# Functions
#

define ShortcutRule
$(1): .subdirs $(2)/$(1)
endef

define MakeLibrary
DEP_LIBS_$(1) = $$(foreach lib,$$(filter %.a,$$(COMPONENTS_$(1))),$$(dir $$(lib))$$(LIBODIR)/$$(notdir $$(lib)))
DEP_OBJS_$(1) = $$(foreach obj,$$(filter %.o,$$(COMPONENTS_$(1))),$$(dir $$(obj))$$(OBJODIR)/$$(notdir $$(obj)))
$$(LIBODIR)/$(1).a: $$(OBJS) $$(DEP_OBJS_$(1)) $$(DEP_LIBS_$(1)) $$(DEPENDS_$(1))
        @mkdir -p $$(LIBODIR)
        $$(if $$(filter %.a,$$?),mkdir -p $$(EXTRACT_DIR)_$(1))
        $$(if $$(filter %.a,$$?),cd $$(EXTRACT_DIR)_$(1); $$(foreach lib,$$(filter %.a,$$?),$$(AR) xo $$(UP_EXTRACT_DIR)/$$(lib);))
        $$(AR) ru $$@ $$(filter %.o,$$?) $$(if $$(filter %.a,$$?),$$(EXTRACT_DIR)_$(1)/*.o)
        $$(if $$(filter %.a,$$?),$$(RM) -r $$(EXTRACT_DIR)_$(1))
endef

define MakeImage
DEP_LIBS_$(1) = $$(foreach lib,$$(filter %.a,$$(COMPONENTS_$(1))),$$(dir $$(lib))$$(LIBODIR)/$$(notdir $$(lib)))
DEP_OBJS_$(1) = $$(foreach obj,$$(filter %.o,$$(COMPONENTS_$(1))),$$(dir $$(obj))$$(OBJODIR)/$$(notdir $$(obj)))
$$(IMAGEODIR)/$(1).out: $$(OBJS) $$(DEP_OBJS_$(1)) $$(DEP_LIBS_$(1)) $$(DEPENDS_$(1))
        @mkdir -p $$(IMAGEODIR)
        $$(CC) $$(LDFLAGS) $$(if $$(LINKFLAGS_$(1)),$$(LINKFLAGS_$(1)),$$(LINKFLAGS_DEFAULT) $$(OBJS) $$(DEP_OBJS_$(1)) $$(DEP_LIBS_$(1))) -o $$@
endef

$(BINODIR)/%.bin: $(IMAGEODIR)/%.out
        @mkdir -p $(BINODIR)
       
ifeq ($(APP), 0)
        @$(RM) -r ../bin/eagle.S ../bin/eagle.dump
        @$(OBJDUMP) -x -s $< > ../bin/eagle.dump
        @$(OBJDUMP) -S $< > ../bin/eagle.S
else
        mkdir -p ../bin/upgrade
        @$(RM) -r ../bin/upgrade/$(BIN_NAME).S ../bin/upgrade/$(BIN_NAME).dump
        @$(OBJDUMP) -x -s $< > ../bin/upgrade/$(BIN_NAME).dump
        @$(OBJDUMP) -S $< > ../bin/upgrade/$(BIN_NAME).S
endif

        @$(OBJCOPY) --only-section .text -O binary $< eagle.app.v6.text.bin
        @$(OBJCOPY) --only-section .data -O binary $< eagle.app.v6.data.bin
        @$(OBJCOPY) --only-section .rodata -O binary $< eagle.app.v6.rodata.bin
        @$(OBJCOPY) --only-section .irom0.text -O binary $< eagle.app.v6.irom0text.bin

        @echo ""
        @echo "!!!"
       
ifeq ($(app), 0)
        @python ../tools/gen_appbin.py $< 0 $(mode) $(freqdiv) $(size_map) $(app)
        @mv eagle.app.flash.bin ../bin/eagle.flash.bin
        @mv eagle.app.v6.irom0text.bin ../bin/eagle.irom0text.bin
        @rm eagle.app.v6.*
        @echo "No boot needed."
        @echo "Generate eagle.flash.bin and eagle.irom0text.bin successully in folder bin."
        @echo "eagle.flash.bin-------->0x00000"
        @echo "eagle.irom0text.bin---->0x10000"
else
    ifneq ($(boot), new)
                @python ../tools/gen_appbin.py $< 1 $(mode) $(freqdiv) $(size_map) $(app)
                @echo "Support boot_v1.1 and +"
    else
                @python ../tools/gen_appbin.py $< 2 $(mode) $(freqdiv) $(size_map) $(app)

            ifeq ($(size_map), 6)
                @echo "Support boot_v1.4 and +"
        else
            ifeq ($(size_map), 5)
                @echo "Support boot_v1.4 and +"
            else
                @echo "Support boot_v1.2 and +"
            endif
        endif
    endif

        @mv eagle.app.flash.bin ../bin/upgrade/$(BIN_NAME).bin
        @rm eagle.app.v6.*
        @echo "Generate $(BIN_NAME).bin successully in folder bin/upgrade."
        @echo "boot.bin------------>0x00000"
        @echo "$(BIN_NAME).bin--->$(addr)"
endif

        @echo "!!!"

#############################################################
# Rules base
# Should be done in top-level makefile only
#

all:        .subdirs $(OBJS) $(OLIBS) $(OIMAGES) $(OBINS) $(SPECIAL_MKTARGETS)

clean:
        $(foreach d, $(SUBDIRS), $(MAKE) -C $(d) clean;)
        $(RM) -r $(ODIR)/$(TARGET)/$(FLAVOR)

clobber: $(SPECIAL_CLOBBER)
        $(foreach d, $(SUBDIRS), $(MAKE) -C $(d) clobber;)
        $(RM) -r $(ODIR)

.subdirs:
        @set -e; $(foreach d, $(SUBDIRS), $(MAKE) -C $(d);)

#.subdirs:
#        $(foreach d, $(SUBDIRS), $(MAKE) -C $(d))

ifneq ($(MAKECMDGOALS),clean)
ifneq ($(MAKECMDGOALS),clobber)
ifdef DEPS
sinclude $(DEPS)
endif
endif
endif

$(OBJODIR)/%.o: %.c
        @mkdir -p $(OBJODIR);
        $(CC) $(if $(findstring $<,$(DSRCS)),$(DFLAGS),$(CFLAGS)) $(COPTS_$(*F)) -o $@ -c $<

$(OBJODIR)/%.d: %.c
        @mkdir -p $(OBJODIR);
        @echo DEPEND: $(CC) -M $(CFLAGS) $<
        @set -e; rm -f $@; \
        $(CC) -M $(CFLAGS) $< > $@.$$$$; \
        sed 's,\($*\.o\)[ :]*,$(OBJODIR)/\1 $@ : ,g' < $@.$$$$ > $@; \
        rm -f $@.$$$$

$(OBJODIR)/%.o: %.cpp
        @mkdir -p $(OBJODIR);
        $(CXX) $(if $(findstring $<,$(DSRCS)),$(DFLAGS),$(CFLAGS)) $(COPTS_$(*F)) -o $@ -c $<

$(OBJODIR)/%.d: %.cpp
        @mkdir -p $(OBJODIR);
        @echo DEPEND: $(CXX) -M $(CFLAGS) $<
        @set -e; rm -f $@; \
        sed 's,\($*\.o\)[ :]*,$(OBJODIR)/\1 $@ : ,g' < $@.$$$$ > $@; \
        rm -f $@.$$$$

$(OBJODIR)/%.o: %.s
        @mkdir -p $(OBJODIR);
        $(CC) $(CFLAGS) -o $@ -c $<

$(OBJODIR)/%.d: %.s
        @mkdir -p $(OBJODIR); \
        set -e; rm -f $@; \
        $(CC) -M $(CFLAGS) $< > $@.$$$$; \
        sed 's,\($*\.o\)[ :]*,$(OBJODIR)/\1 $@ : ,g' < $@.$$$$ > $@; \
        rm -f $@.$$$$

$(OBJODIR)/%.o: %.S
        @mkdir -p $(OBJODIR);
        $(CC) $(CFLAGS) -D__ASSEMBLER__ -o $@ -c $<

$(OBJODIR)/%.d: %.S
        @mkdir -p $(OBJODIR); \
        set -e; rm -f $@; \
        $(CC) -M $(CFLAGS) $< > $@.$$$$; \
        sed 's,\($*\.o\)[ :]*,$(OBJODIR)/\1 $@ : ,g' < $@.$$$$ > $@; \
        rm -f $@.$$$$

$(foreach lib,$(GEN_LIBS),$(eval $(call ShortcutRule,$(lib),$(LIBODIR))))

$(foreach image,$(GEN_IMAGES),$(eval $(call ShortcutRule,$(image),$(IMAGEODIR))))

$(foreach bin,$(GEN_BINS),$(eval $(call ShortcutRule,$(bin),$(BINODIR))))

$(foreach lib,$(GEN_LIBS),$(eval $(call MakeLibrary,$(basename $(lib)))))

$(foreach image,$(GEN_IMAGES),$(eval $(call MakeImage,$(basename $(image)))))

#############################################################
# Recursion Magic - Don't touch this!!
#
# Each subtree potentially has an include directory
#   corresponding to the common APIs applicable to modules
#   rooted at that subtree. Accordingly, the INCLUDE PATH
#   of a module can only contain the include directories up
#   its parent path, and not its siblings
#
# Required for each makefile to inherit from the parent
#

INCLUDES := $(INCLUDES) -I $(PDIR)include -I $(PDIR)include/$(TARGET) -I $(PDIR)driver_lib/include
PDIR := ../$(PDIR)
sinclude $(PDIR)Makefile

出30入54汤圆

发表于 2020-3-13 17:48:58 | 显示全部楼层
@$(OBJCOPY) --only-section .irom0.text -O binary $< eagle.app.v6.irom0text.bin
上面这行下面加一行:
size $<
或者
xtensa-lx106-elf-size $<
试试

出45入88汤圆

 楼主| 发表于 2020-3-13 17:58:08 | 显示全部楼层
cloudboy 发表于 2020-3-13 17:48
@$(OBJCOPY) --only-section .irom0.text -O binary $< eagle.app.v6.irom0text.bin
上面这行下面加一行:
...

编译出来是这两个

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出45入88汤圆

 楼主| 发表于 2020-3-13 17:58:51 | 显示全部楼层
好像两个命令效果一样

出45入88汤圆

 楼主| 发表于 2020-3-13 18:33:12 | 显示全部楼层
cloudboy 发表于 2020-3-13 17:48
@$(OBJCOPY) --only-section .irom0.text -O binary $< eagle.app.v6.irom0text.bin
上面这行下面加一行:
...

谢谢帮忙。

出45入88汤圆

 楼主| 发表于 2020-3-13 18:39:20 | 显示全部楼层
DEC那一栏是什么数据?

出30入54汤圆

发表于 2020-3-13 20:22:13 | 显示全部楼层
Edesigner. 发表于 2020-3-13 18:39
DEC那一栏是什么数据?

dec就是十进制的意思,就是左边三个加起来,然后右边hex是对应的十六进制
这个值不是bin文件的大小,因为bin文件不会包含bss段的

出30入54汤圆

发表于 2020-3-13 20:23:55 | 显示全部楼层
Edesigner. 发表于 2020-3-13 17:58
好像两个命令效果一样

从我的经验来看,正常情况是一样的,因为size工具解析不同的gcc目标工具链都是通用的
不过这个数据有时候会出错,主要是定义了一些特殊的段,这个时候可能需要用nm等工具进行手动分析

出45入88汤圆

 楼主| 发表于 2020-3-13 21:13:38 | 显示全部楼层
cloudboy 发表于 2020-3-13 20:23
从我的经验来看,正常情况是一样的,因为size工具解析不同的gcc目标工具链都是通用的
不过这个数据有时候 ...

有一个函数没有用ICACHE_FLASH_ATTR时:
   text    data     bss     dec     hex filename
249104    2410   26496  278010   43dfa .output/eagle/debug/image/eagle.app.v6.out

用了ICACHE_FLASH_ATTR标识时:
   text    data     bss     dec     hex filename
249068    2410   26496  277974   43dd6 .output/eagle/debug/image/eagle.app.v6.out

问题:ICACHE_FLASH_ATTR是在flash运行,没有标识时在内存运行。那么怎么知道ram消耗了多少?这个消耗是全局的吗?

出30入54汤圆

发表于 2020-3-14 09:36:55 | 显示全部楼层
Edesigner. 发表于 2020-3-13 21:13
有一个函数没有用ICACHE_FLASH_ATTR时:
   text    data     bss     dec     hex filename
249104     ...

这种特殊的attribute特性定义的特殊段的话,需要结合SDK的实际情况,然后查看相应的段的分布可以准确了解所使用的内存
一般xxxxx-readelf -a xxxx.out能看到所有的section信息

出45入88汤圆

 楼主| 发表于 2020-3-14 11:46:17 | 显示全部楼层
cloudboy 发表于 2020-3-14 09:36
这种特殊的attribute特性定义的特殊段的话,需要结合SDK的实际情况,然后查看相应的段的分布可以准确了解 ...

有没有办法编译时显示警报信息?现在只显示error,没有warning

出30入54汤圆

发表于 2020-3-14 13:47:37 | 显示全部楼层
Edesigner. 发表于 2020-3-14 11:46
有没有办法编译时显示警报信息?现在只显示error,没有warning

在编译参数CFLAGS里面添加-Wall

出45入88汤圆

 楼主| 发表于 2020-3-14 16:17:44 | 显示全部楼层
cloudboy 发表于 2020-3-14 13:47
在编译参数CFLAGS里面添加-Wall

可以了,有warning出来了,谢谢。另外有没有方法设置一下,让编译器默认是ICACHE_FLASH_ATTR。iram的函数自行设置。

出0入0汤圆

发表于 2020-3-18 16:31:37 | 显示全部楼层
Makefile 里面直接引用tensilica gcc编译器里的size命令可以看到text以及data段的占用大小。但是如果想知道malloc占用大小,得运行时看,可以把newlib的内存管理信息打印出来。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-9-28 11:18

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表