Showing results for 
Search instead for 
Did you mean: 

ELF file and converted BIN far too large



  I have an STM32L433CBT processor and created a project using STM32 IDE version 1.14. I created the project on STM32 MX version 6.9.1 .  The project works in debug and I created a release version , but the elf file is far too large. I have the following running in the post build steps:

arm-none-eabi-objcopy -S -O binary "Project.elf" "Project.bin" 

then use the bin file to program the chip out in the field. For some reason the elf file generated in release is 232KB, and the converted bin is 131,073KB.   Compared to previous larger projects where the elf is size 176KB and converted bin is 68KB. 

When I build the application I get the following in the console:

arm-none-eabi-gcc -o "Project.elf" @"objects.list" -mcpu=cortex-m4 -T"D:\Work\air\STM32\Project\STM32L433CBTX_FLASH.ld" --specs=nosys.specs -Wl,-Map="" -Wl,--gc-sections -static -u _printf_float --specs=nano.specs -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -u _printf_float -Wl,--start-group -lc -lm -Wl,--end-group

Finished building target: Project.elf


arm-none-eabi-size Project.elf

arm-none-eabi-objdump -h -S Project.elf > "Project.list"

text data bss dec hex filename

57196 1190 14392 72778 11c4a Project.elf

Finished building: default.size.stdout


Finished building: Project.list


arm-none-eabi-objcopy -S -O binary "Project.elf" "Project.bin"



A previous project that works as expected, I get :

arm-none-eabi-gcc -o "Project2.elf" @"objects.list" -mcpu=cortex-m4 -T"../STM32L433VC_BM.ld" --specs=nosys.specs -Wl,-Map="" -Wl,--gc-sections -static --specs=nano.specs -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -u _printf_float -Wl,--start-group -lc -lm -Wl,--end-group

Finished building target: Project2.elf


arm-none-eabi-size Project2.elf

text data bss dec hex filename

68060 872 14104 83036 1445c Project2.elf

Finished building: default.size.stdout


arm-none-eabi-objdump -h -S Project2.elf > "Project2.list"

Finished building: Project2.list


arm-none-eabi-objcopy -S -O binary "Project2.elf" "Project2.bin"


Both projects have the same setup as below:







Link setup:



If someone can help, this would be great as I am stuck till I fix this issue.

Best Regards







  I see the issue , but dont know the way to sort it.  This project is using STANDBY mode, and also accessing the RAM2 so I can preserve some memory when it wakes up. If I remove this, then it looks good , to 57K.


I have the following in my code to use this memory:



#define PERM_RAM2 __attribute__((section(".Permanent_buffer")))

char RTCValid PERM_RAM2;

char NodeStatus PERM_RAM2;



The linker file has:

/* Highest address of the user mode stack */

_estack = ORIGIN(RAM) + LENGTH(RAM); /* end of "RAM" Ram type memory */


_Min_Heap_Size = 0x200; /* required amount of heap */

_Min_Stack_Size = 0x400; /* required amount of stack */


/* Memories definition */



RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K

RAM2 (xrw) : ORIGIN = 0x10000000, LENGTH = 16K

FLASH (rx) : ORIGIN = 0x08003000, LENGTH = (256K-12K)


.Permanent_buffer :



} >RAM2


Is this the wrong way of doing this? In debug mode it works, as when wakeup , the memory still holds the original values.


Best Regards




You self reply, wrong way. Try use NOLOAD or other method.

memory - Understanding linker script NOLOAD sections in embedded software - Stack Overflow


  Many thanks, that worked, I simply added the NOLOAD as you suggested.


.Permanent_buffer (NOLOAD):



} >RAM2


Many thanks, this has made my weekend 😀