We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
I am trying to get a custom bootloader to run from RAM only and so we modified our scatter file to be as follows:
LR_IROM1 0x00000000 0x00007FC8 { ; load region size_region ER_IROM1 0x00000000 0x00007FC8 { ; load address = execution address *.o (RESET, +First) *(InRoot$$Sections) } RW_IRAM1 0x1FFF0000 0x00010000 { ; RW data *(+RO) } RW_IRAM2 0x20000000 0x00010000 { ; RW data *(+RW, +ZI) } }
This appears to work when using the debugger, but not when flashed and run without the debugger. Is it possible that the debugger is copying the code from ROM to RAM? Shouldn't the C Startup library in __main be doing this? Do I need to specify something for this copy to take place?
Thanks, JD
You don't give too much detail. You did not specify your chip, but it do not seem to me that your scatter file makes sure any code is copied to RAM! Try adding +RO to RW_IRAM2. Besides, if your boot loader needs to program itself, you must also place the C standard libraries in RAM.
We are using a K60FN1M0VMD15.
The code (+RO) is should be copied to RW_IRAM1 (which is specified). RW_IRAM2 is for RW variables and ZI variables.
How can the C standard libraries be placed in RAM? At least part of the C standard libraries (the part that does the copying from ROM to RAM) can not be placed in RAM.
-JD
I forgot the exact syntax but it is demonstrated in the linker user manual.