This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

DFU bootloader compilation error with PCA10001 using s120 on sdk 10.

I created a bsp folder dfu_dual_bank_serial_s120 from PCA10028/dfu_dual_bak_serial_s13 in examples/dfu/bootloader/PCA10028.

This is for supporting DFU over UART for our application using s120 softdevice on PCA10001 evaluation kit with sdk_10.

Changes Board ID to DBOARD_PCA10001 in CFLAGS & ASM FLAGS in Makefile.

Getting the fallowing compilation error with dual_bank_serial_s120. usr/local/gcc-arm-none-eabi-4_9-2015q1/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/bin/ld: region RAM overflowed with stack collect2: error: ld returned 1 exit status

I am getting this error with PCA10028 also with DFU over uart.

  • Could you share the makefile and linker file (.ld) you are using?

  • enter code here PROJECT_NAME := dfu_dual_bank_ble_s120_pca10001

    export OUTPUT_FILENAME #MAKEFILE_NAME := $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)) MAKEFILE_NAME := $(MAKEFILE_LIST) MAKEFILE_DIR := $(dir $(MAKEFILE_NAME) )

    TEMPLATE_PATH = ../../../../../../components/toolchain/gcc ifeq ($(OS),Windows_NT) include $(TEMPLATE_PATH)/Makefile.windows else include $(TEMPLATE_PATH)/Makefile.posix endif

    MK := mkdir RM := rm -rf

    #echo suspend ifeq ("$(VERBOSE)","1") NO_ECHO := else NO_ECHO := @ endif

    #GNU_INSTALL_ROOT := /opt/gcc-arm-none-eabi-4_8-2014q2

    Toolchain commands

    CC := '$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-gcc' AS := '$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-as' AR := '$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-ar' -r LD := '$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-ld' NM := '$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-nm' OBJDUMP := '$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-objdump' OBJCOPY := '$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-objcopy' SIZE := '$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-size'

    #function for removing duplicates in a list remduplicates = $(strip $(if $1,$(firstword $1) $(call remduplicates,$(filter-out $(firstword $1),$1))))

    #source common to all targets C_SOURCE_FILES +=
    $(abspath ../../../../../../components/libraries/util/app_error.c)
    $(abspath ../../../../../../components/libraries/scheduler/app_scheduler.c)
    $(abspath ../../../../../../components/libraries/timer/app_timer.c)
    $(abspath ../../../../../../components/libraries/timer/app_timer_appsh.c)
    $(abspath ../../../../../../components/libraries/bootloader_dfu/bootloader.c)
    $(abspath ../../../../../../components/libraries/bootloader_dfu/bootloader_settings.c)
    $(abspath ../../../../../../components/libraries/bootloader_dfu/bootloader_util.c)
    $(abspath ../../../../../../components/libraries/crc16/crc16.c)
    $(abspath ../../../../../../components/libraries/bootloader_dfu/dfu_dual_bank.c)
    $(abspath ../../../../../../components/libraries/bootloader_dfu/dfu_init_template.c)
    $(abspath ../../../../../../components/libraries/bootloader_dfu/dfu_transport_ble.c)
    $(abspath ../../../../../../components/libraries/hci/hci_mem_pool.c)
    $(abspath ../../../../../../components/libraries/util/nrf_assert.c)
    $(abspath ../../../../../../components/drivers_nrf/delay/nrf_delay.c)
    $(abspath ../../../../../../components/drivers_nrf/pstorage/pstorage_raw.c)
    $(abspath ../../../dfu_ble_svc.c)
    $(abspath ../../../main.c)
    $(abspath ../../../../../../components/ble/common/ble_advdata.c)
    $(abspath ../../../../../../components/ble/common/ble_conn_params.c)
    $(abspath ../../../../../../components/ble/ble_services/ble_dfu/ble_dfu.c)
    $(abspath ../../../../../../components/ble/common/ble_srv_common.c)
    $(abspath ../../../../../../components/toolchain/system_nrf51.c)
    $(abspath ../../../../../../components/softdevice/common/softdevice_handler/softdevice_handler.c)
    $(abspath ../../../../../../components/softdevice/common/softdevice_handler/softdevice_handler_appsh.c) \

    #assembly files common to all targets ASM_SOURCE_FILES = $(abspath ../../../../../../components/toolchain/gcc/gcc_startup_nrf51.s)

    #includes common to all targets INC_PATHS = -I$(abspath ../../../config/dfu_dual_bank_ble_s120_pca10001) INC_PATHS += -I$(abspath ../../../config) INC_PATHS += -I$(abspath ../../../../../../components/libraries/util) INC_PATHS += -I$(abspath ../../../../../../components/toolchain/gcc) INC_PATHS += -I$(abspath ../../../../../../components/toolchain) INC_PATHS += -I$(abspath ../../../../../../components/ble/common) INC_PATHS += -I$(abspath ../../../../../../components/libraries/scheduler) INC_PATHS += -I$(abspath ../../../../../bsp) INC_PATHS += -I$(abspath ../../../../../../components/drivers_nrf/pstorage) INC_PATHS += -I$(abspath ../../../../../../components/libraries/bootloader_dfu/ble_transport) INC_PATHS += -I$(abspath ../../../../../../components/softdevice/common/softdevice_handler) INC_PATHS += -I$(abspath ../../../../../../components/device) INC_PATHS += -I$(abspath ../../../../../../components/libraries/hci) INC_PATHS += -I$(abspath ../../../../../../components/drivers_nrf/delay) INC_PATHS += -I$(abspath ../../../../../../components/libraries/crc16) INC_PATHS += -I$(abspath ../../../../../../components/ble/ble_services/ble_dfu) INC_PATHS += -I$(abspath ../../../../../../components/libraries/timer) INC_PATHS += -I$(abspath ../../../../../../components/drivers_nrf/hal) INC_PATHS += -I$(abspath ../../../../../../components/softdevice/s130/headers) INC_PATHS += -I$(abspath ../../../../../../components/libraries/bootloader_dfu)

    OBJECT_DIRECTORY = _build LISTING_DIRECTORY = $(OBJECT_DIRECTORY) OUTPUT_BINARY_DIRECTORY = $(OBJECT_DIRECTORY)

    Sorting removes duplicates

    BUILD_DIRECTORIES := $(sort $(OBJECT_DIRECTORY) $(OUTPUT_BINARY_DIRECTORY) $(LISTING_DIRECTORY) )

    #flags common to all targets CFLAGS = -DSWI_DISABLE0 CFLAGS += -DBOARD_PCA10001 #CFLAGS += -DBOARD_CLF_LM_1 CFLAGS += -DSOFTDEVICE_PRESENT CFLAGS += -DNRF51 CFLAGS += -D__HEAP_SIZE=0 CFLAGS += -DS120 CFLAGS += -DBLE_STACK_SUPPORT_REQD CFLAGS += -DBSP_DEFINES_ONLY CFLAGS += -mcpu=cortex-m0 CFLAGS += -mthumb -mabi=aapcs --std=gnu99 CFLAGS += -Wall -Werror -Os CFLAGS += -mfloat-abi=soft

    keep every function in separate section. This will allow linker to dump unused functions

    CFLAGS += -ffunction-sections -fdata-sections -fno-strict-aliasing CFLAGS += -fno-builtin --short-enums

    keep every function in separate section. This will allow linker to dump unused functions

    LDFLAGS += -Xlinker -Map=$(LISTING_DIRECTORY)/$(OUTPUT_FILENAME).map LDFLAGS += -mthumb -mabi=aapcs -L $(TEMPLATE_PATH) -T$(LINKER_SCRIPT) LDFLAGS += -mcpu=cortex-m0

    let linker to dump unused sections

    LDFLAGS += -Wl,--gc-sections

    use newlib in nano version

    LDFLAGS += --specs=nano.specs -lc -lnosys

    Assembler flags

    ASMFLAGS += -x assembler-with-cpp ASMFLAGS += -DSWI_DISABLE0 ASMFLAGS += -DBOARD_PCA10001 ASMFLAGS += -DSOFTDEVICE_PRESENT ASMFLAGS += -DNRF51 ASMFLAGS += -D__HEAP_SIZE=0 ASMFLAGS += -DS120 ASMFLAGS += -DBLE_STACK_SUPPORT_REQD ASMFLAGS += -DBSP_DEFINES_ONLY #default target - first one defined default: clean nrf51822_xxaa

    #building all targets all: clean $(NO_ECHO)$(MAKE) -f $(MAKEFILE_NAME) -C $(MAKEFILE_DIR) -e cleanobj $(NO_ECHO)$(MAKE) -f $(MAKEFILE_NAME) -C $(MAKEFILE_DIR) -e nrf51822_xxaa

    #target for printing all targets help: @echo following targets are available: @echo nrf51822_xxaa

    C_SOURCE_FILE_NAMES = $(notdir $(C_SOURCE_FILES)) C_PATHS = $(call remduplicates, $(dir $(C_SOURCE_FILES) ) ) C_OBJECTS = $(addprefix $(OBJECT_DIRECTORY)/, $(C_SOURCE_FILE_NAMES:.c=.o) )

    ASM_SOURCE_FILE_NAMES = $(notdir $(ASM_SOURCE_FILES)) ASM_PATHS = $(call remduplicates, $(dir $(ASM_SOURCE_FILES) )) ASM_OBJECTS = $(addprefix $(OBJECT_DIRECTORY)/, $(ASM_SOURCE_FILE_NAMES:.s=.o) )

    vpath %.c $(C_PATHS) vpath %.s $(ASM_PATHS)

    OBJECTS = $(C_OBJECTS) $(ASM_OBJECTS)

    nrf51822_xxaa: OUTPUT_FILENAME := nrf51822_xxaa nrf51822_xxaa: LINKER_SCRIPT=../../../dfu_gcc_nrf51.ld nrf51822_xxaa: $(BUILD_DIRECTORIES) $(OBJECTS) @echo Linking target: $(OUTPUT_FILENAME).out $(NO_ECHO)$(CC) $(LDFLAGS) $(OBJECTS) $(LIBS) -o $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out $(NO_ECHO)$(MAKE) -f $(MAKEFILE_NAME) -C $(MAKEFILE_DIR) -e finalize

    Create build directories

    $(BUILD_DIRECTORIES): echo $(MAKEFILE_NAME) $(MK) $@

    Create objects from C SRC files

    $(OBJECT_DIRECTORY)/%.o: %.c @echo Compiling file: $(notdir $<) $(NO_ECHO)$(CC) $(CFLAGS) $(INC_PATHS) -c -o $@ $<

    Assemble files

    $(OBJECT_DIRECTORY)/%.o: %.s @echo Compiling file: $(notdir $<) $(NO_ECHO)$(CC) $(ASMFLAGS) $(INC_PATHS) -c -o $@ $<

    Link

    $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out: $(BUILD_DIRECTORIES) $(OBJECTS) @echo Linking target: $(OUTPUT_FILENAME).out $(NO_ECHO)$(CC) $(LDFLAGS) $(OBJECTS) $(LIBS) -o $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out

    Create binary .bin file from the .out file

    $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).bin: $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out @echo Preparing: $(OUTPUT_FILENAME).bin $(NO_ECHO)$(OBJCOPY) -O binary $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).bin

    Create binary .hex file from the .out file

    $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).hex: $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out @echo Preparing: $(OUTPUT_FILENAME).hex $(NO_ECHO)$(OBJCOPY) -O ihex $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).hex

    finalize: genbin genhex echosize

    genbin: @echo Preparing: $(OUTPUT_FILENAME).bin $(NO_ECHO)$(OBJCOPY) -O binary $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).bin

    Create binary .hex file from the .out file

    genhex: @echo Preparing: $(OUTPUT_FILENAME).hex $(NO_ECHO)$(OBJCOPY) -O ihex $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).hex

    echosize: -@echo '' $(NO_ECHO)$(SIZE) $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out -@echo ''

    clean: $(RM) $(BUILD_DIRECTORIES)

    cleanobj: $(RM) $(BUILD_DIRECTORIES)/*.o

    flash: $(MAKECMDGOALS) @echo Flashing: $(OUTPUT_BINARY_DIRECTORY)/$<.hex nrfjprog --program $(OUTPUT_BINARY_DIRECTORY)/nrf51822_xxaa.hex -f NRF51 --sectorerase nrfjprog --reset

    Flash softdevice

    Flash softdevice

    flash_softdevice: @echo Flashing: s120_nrf51_2.1.0_softdevice.hex nrfjprog --program ../../../../../../components/softdevice/s120/hex/s120_nrf51_2.1.0_softdevice.hex -f nrf51 --chiperase nrfjprog --reset

  • linker script is available in nordic_sdk_10. dfu_gcc_nrf51.ld is the linker script used in Makefile.

  • Hi,

    Modified the example so it should work with PCA10001 and s120 v.2 : nRF51_SDK_10.0.0_serial_dfu_s120_v.2.1.0.zip

    Had to allocate more RAM to make it build.

  • Is this zip file contains updated makefile and linker script.

Related