Hi Guys,
I have a LPC2292 system and i use a linker file to flash the FLASH / ROM on the board. The FLASH is totally 256KB divided into a number of sectors. My code is around 31KB and occupied the sectors 0,1,2,& 3 . Each of these sectors are 8KB each .
My requirement is that i pad the remaining 1KB space left in sector 3 with some default value.
ARMLINK: FILL UNUSED FLASH CONTENT WITH PREDEFINED VALUE : http://www.keil.com/support/docs/3407.htm
Seems to be the way to go about it . However END_OF_BLOCK (END_ADR - START_ADR) FIXED EMPTY 0x0 {} seems to substract the START_ADR from the END_ADR and i get an error;
Here is my linker file :
; ************************************************************* ; *** Scatter-Loading Description File generated by uVision *** ; ************************************************************* LR_IROM1 0x00000000 0x00040000 { ; load region size_region ER_IROM1 0x00000000 0x00040000 { ; load address = execution address *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) } RW_RAM1 0x80000000 0x00100000 { ; RW data .ANY (+RW +ZI) } RW_RAM2 0x81000000 UNINIT 0x00020000 { .ANY (+RW +ZI) } RW_IRAM1 0x40000000 0x00004000 { Startup.o (+ZI +RW) RTX_Config.o ( +RW) checksum.o (+ZI +RW ) .ANY (+RW +ZI) } END_OF_BLOCK 0x00008000 - 0x00007EFC FIXED EMPTY 0x0 {} }
Error :
.\Obj\TL100-V069.axf: Error: L6291E: Cannot assign Fixed Execution Region END_OF_BLOCK Load Address:0x00000104. Load Address must be greater than or equal to next available Load Address:0x00007fe8.
Is there something silly that I am doing here ? Is this the best way to pad my sector. In other words i want to ensure i use up all the sector 3.
No response in so many 5 days :(
I write a seperete utility to take hex file, pad unused area and calculate checksum over whole image.
You could try something like this...
; ************************************************************* ; *** Scatter-Loading Description File generated by uVision *** ; ************************************************************* LR_IROM1 0x00000000 0x00040000 { ; load region size_region ER_IROM1 0x00000000 0x00040000 { ; load address = execution address *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) } RW_RAM1 0x80000000 0x00100000 { ; RW data .ANY (+RW +ZI) } RW_RAM2 0x81000000 UNINIT 0x00020000 { .ANY (+RW +ZI) } RW_IRAM1 0x40000000 0x00004000 { Startup.o (+ZI +RW) RTX_Config.o ( +RW) checksum.o (+ZI +RW ) .ANY (+RW +ZI) } } LR_IROM2 +0 { ER_BLANK_REGION +0 FILL 0xFFFFFFFF 0x00007EFC {} }
You will probably need to adjust the fill size (0x00007EFC) to allow for the RW_IRAM1 compressed initialisation data to ensure all the ROM is completely filled. Its size will vary depending on the content.
There may be a way to embed this calculation into the scatter file itself so the size is automatically adjusted for the actual RO code and RW initialisation data sections sizes, but I don't know it (yet).
JT