CMSIS-Core (Cortex-M)  Version 5.6.0
CMSIS-Core support for Cortex-M processor-based devices
 All Data Structures Files Functions Variables Enumerations Enumerator Groups Pages
Scatter-Loading description file <device>_ac<5|6>.sct

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.

/*--------------------- Flash Configuration ----------------------------------
; <h> Flash Configuration
; <o0> Flash Base Address <0x0-0xFFFFFFFF:8>
; <o1> Flash Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>
#define __ROM_BASE 0x00000000
#define __ROM_SIZE 0x00080000
/*--------------------- Embedded RAM Configuration ---------------------------
; <h> RAM Configuration
; <o0> RAM Base Address <0x0-0xFFFFFFFF:8>
; <o1> RAM Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>
#define __RAM_BASE 0x20000000
#define __RAM_SIZE 0x00040000
/*--------------------- Stack / Heap Configuration ---------------------------
; <h> Stack / Heap Configuration
; <o0> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
; <o1> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>
#define __STACK_SIZE 0x00000200
#define __HEAP_SIZE 0x00000C00
/*--------------------- CMSE Veneer Configuration ---------------------------
; <h> CMSE Veneer Configuration
; <o0> CMSE Veneer Size (in Bytes) <0x0-0xFFFFFFFF:32>
; </h>
#define __CMSEVENEER_SIZE 0x200
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