Hello, I want to reserve memory region for specific data. So I edit the scatter file and I add following line to the scatter file.
; ************************************************************* ; *** Scatter-Loading Description File generated by uVision *** ; *************************************************************
LR_IROM1 0x08000000 0x00040000 { ; load region size_region ER_IROM1 0x08000000 0x00040000 { ; load address = execution address *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) } RW_IRAM1 0x20000000 0x00040000 { ; RW data .ANY (+RW +ZI) } RW_IRAM2 +0 EMPTY 0x10000 // I ADD THIS SECTION ! {
} }
My first question is, Is this way is true for reserve memory region ? second question is, independent from first question, How can I access this memory region (RW_IRAM2) from c code ?
Thanks for your answers ! Best Regards.
www.keil.com/.../armlink_pge1362065952432.htm
extern void *Image$$RW_IRAM2$$Base; printf("RW_IRAM2 Base %08X\n", (uint32_t)&Image$$RW_IRAM2$$Base);
App reports RW_IRAM2 Base 20013A00
.MAP reports
... __heap_base 0x20000a00 Data 0 startup_stm32f769xx.o(HEAP) __heap_limit 0x20012a00 Data 0 startup_stm32f769xx.o(HEAP) Image$$RW_IRAM2$$Base 0x20013a00 Number 0 anon$$obj.o ABSOLUTE __initial_sp 0x20013a00 Data 0 startup_stm32f769xx.o(STACK) ...
Could you use the heap?
Use structure/pointers? Use #pramga or attributes?
Thanks for your reply.
Actualy, I will use this memory for updating the firmware. Our plan is like : We store new firmware in this memory, then in boot mode, we read new firmware from this memory region.
I dont understand your comment's last section. What does it mean Use structure/pointers? Use #pramga or attributes? Could you explain in more detail ?
Best Regards.
If you're remotely curious about how things work review the docs or use Google/Bing to find details.
You can use the scatter file to direct objects/sections to specific load region. You can use #pragma or attributes to control where
www.keil.com/.../armclang_ref_cmf1493390581125.htm www.keil.com/.../armclang_intro_pge1362066000009.htm
FirmwareStuct *FW = (FirmwareStuct *)0x2001C000; uint8_t *FWBuffer = (uint8_t *)0x20024000; uint8_t *SlackSpace = (uint8_t *)&Image$$RW_IRAM2$$Base;
You might want to consider better ways to stage firmware for update or OTA implementations as SRAM is usually smaller than FLASH.
Thanks for your answers ! Really helped me .