Hi All,
I am developing an application on nRF52840 Preview DK which does not need the Soft device. But it needs the MBR to run a bootloader for Firmware update purpose.
I've taken the MBR from Thread SDK as suggested in:
https://devzone.nordicsemi.com/f/nordic-q-a/31133/how-to-separate-the-mbr-from-the-softdevice
The size of the MBR is 0x1000. Therefore, I am setting the origin of the linker script at 0x1000.
The linker script I am using to build the application is as follows:
/* Linker script to configure memory regions. */ SEARCH_DIR(.) GROUP(-lgcc -lc -lnosys) MEMORY { FLASH (rx) : ORIGIN = 0x1000, LENGTH = 0xFF000 RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x40000 UICR_APPROTECT (rx) : ORIGIN = 0x10001208, LENGTH = 0x4 } SECTIONS { /* UICR. APPROTECT*/ .uicrApprotectAddress : { KEEP(*(.uicrApprotectAddress)) } > UICR_APPROTECT } SECTIONS { . = ALIGN(4); .mem_section_dummy_ram : { } .log_dynamic_data : { PROVIDE(__start_log_dynamic_data = .); KEEP(*(SORT(.log_dynamic_data*))) PROVIDE(__stop_log_dynamic_data = .); } > RAM } INSERT AFTER .data; SECTIONS { .mem_section_dummy_rom : { } .log_const_data : { PROVIDE(__start_log_const_data = .); KEEP(*(SORT(.log_const_data*))) PROVIDE(__stop_log_const_data = .); } > FLASH } INSERT AFTER .text INCLUDE "nrf5x_common.ld"
To develop the application I am using FreeRTOS.
I have noticed that if I set the origin of the application to 0x0, it works as expected. But if I set it to 0x1000 (as seen in the above linker script), the application halts.
As can be seen in above image , the call to vPortStartFirstTask() fails.
This does not happen when softdevice is installed or the origin is set to 0x0.
Could anyone suggest what is going wrong here?