WXK
2025-03-25 4a0afa1557e0189d8d32cc59f7a246f5188bb8e6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#! armclang -E --target=arm-arm-none-eabi -mcpu=cortex-m0 -xc
; command above MUST be in first line (no comment above!)
 
/*
;-------- <<< Use Configuration Wizard in Context Menu >>> -------------------
*/
 
/*--------------------- 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      0x0001B000
 
/*--------------------- 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      (0x02000000 + __ROM_SIZE)
#define __RAM_SIZE      (0x0002F800 - __ROM_SIZE)
 
/*--------------------- 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    0x00003800
#define __HEAP_SIZE     0x00000000
 
/*
;------------- <<< end of configuration section >>> ---------------------------
*/
 
 
/*----------------------------------------------------------------------------
  User Stack & Heap boundary definition
 *----------------------------------------------------------------------------*/
#define __STACK_TOP    (__RAM_BASE + __RAM_SIZE)    /* starts at end of RAM */
#define __HEAP_BASE    (AlignExpr(+0, 8))           /* starts after RW_RAM section, 8 byte aligned */
 
 
/*----------------------------------------------------------------------------
  Scatter File Definitions definition
 *----------------------------------------------------------------------------*/
#define __RO_BASE       __ROM_BASE
#define __RO_SIZE       __ROM_SIZE
#define __RO_USR_SIZE   0xA0
 
#define __RW_BASE       __RAM_BASE
#define __RW_SIZE      (__RAM_SIZE - __STACK_SIZE - __HEAP_SIZE)
 
 
LR_ROM __RO_BASE __RO_SIZE - __RO_USR_SIZE  {       ; load region size_region
  ER_ROM __RO_BASE __RO_SIZE - __RO_USR_SIZE  {     ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
   .ANY (+XO)
  }
 
  RW_RAM __RW_BASE UNINIT 0x0000008  {  ; noinit data
   *(.bss.noinit)
  }
 
  RW_RAM1 (__RW_BASE + 8) (__RW_SIZE - 8)  {                     ; RW data
   .ANY (+RW)
   .ANY (+ZI)  ; Takes no space in the Load Region
   *(.XIP_SECTION)
  }
 
#if __HEAP_SIZE > 0
  ARM_LIB_HEAP  __HEAP_BASE EMPTY  __HEAP_SIZE  {   ; Reserve empty region for heap
  }
#endif
 
  ARM_LIB_STACK __STACK_TOP EMPTY -__STACK_SIZE {   ; Reserve empty region for stack
  }
}
 
LR_ROM1 +0 __RO_USR_SIZE  {       ; load region size_region
  USR +0 __RO_USR_SIZE  {         ; load address = execution address
   *(.ZBOOT_SECTION)
   *(.ZBUILD_SECTION)
  }
}
 
ScatterAssert(__ROM_SIZE >= (LoadBase(LR_ROM1) + LoadLength(LR_ROM1)))