1. Label the memory symbols in assembly file(startup_.s).
Load__SRAM__Base
DCD |Load$$SRAM$$Base|
Image__SRAM__Base
DCD |IMAGE$$SRAM$$Base|
Image__SRAM__Length
DCD |Image$$SRAM$$Length|
Image __SRAM__ZI_Base
DCD |Image$$SRAM$$ZI$$Base|
Image __SRAM__ZI__Length
DCD |Image$$SRAM$$ZI$$Length|
...
2. Declare the symbols as extern in C.
extern byte *Image__SRAM__Base;
extern byte *Image__SRAM__Length;
extern byte *Load__SRAM__Base;
extern byte *Image__SRAM__ZI__Base;
extern byte *Image__SRAM__ZI__Length;
Use casting to reference different size.
3. How to initialize RW regions(global variables with non-zero initial values)
end_point = (dword *)((dword)Image__SRAM__Base + (dword)Image__SRAM__Length);
for(src = (dword*) Load__SRAM__Base,
dst = (dword*) Image__SRAM__Base; dst<end_point; src++,dst++)
{
*dst = *src;
}