A scatter file for linking is required when using a C startup file.
The Scatter-Loading description file <device>_ac<5|6>.sct contains regions for:
- Code (read-only data, execute-only data)
- RAM (read/write data, zero-initialized data)
- Stack
- Heap
- Stack seal (Armv8-M/v8.1-M)
- CMSE veneer (Armv8-M/v8.1-M)
Within the scatter file, the user needs to specify a set of macros. The scatter file is passed through the C preprocessor which uses these macros to calculate the start address and the size of the different regions.
#define __ROM_BASE 0x00000000
#define __ROM_SIZE 0x00080000
#define __RAM_BASE 0x20000000
#define __RAM_SIZE 0x00040000
#define __STACK_SIZE 0x00000200
#define __HEAP_SIZE 0x00000C00
#define __CMSEVENEER_SIZE 0x200
- Note
- The stack is placed at the end of the available RAM and is growing downwards whereas the Heap is placed after the application data and growing upwards.
Preprocessor command
The scatter file uses different preprocessor commands for Arm Compiler V6 and Arm Compiler V5
- AC6: #! armclang -E –target=arm-arm-none-eabi -mcpu=<mcpu> -xc
- AC5: #! armcc -E