]> git.sur5r.net Git - freertos/blob - Demo/ColdFire_MCF52221_CodeWarrior/lcf/MCF52221_INTERNAL_FLASH.lcf
Continue Coldfire MCF52221 CodeWarrior demo.
[freertos] / Demo / ColdFire_MCF52221_CodeWarrior / lcf / MCF52221_INTERNAL_FLASH.lcf
1 # Sample Linker Command File for CodeWarrior for ColdFire\r
2 \r
3 KEEP_SECTION {.vectortable}\r
4 \r
5 # Memory ranges \r
6 \r
7 MEMORY {\r
8    vectorrom   (RX)  : ORIGIN = 0x00000000, LENGTH = 0x00000400\r
9    cfmprotrom  (RX)  : ORIGIN = 0x00000400, LENGTH = 0x00000020   \r
10    code        (RX)  : ORIGIN = 0x00000500, LENGTH = 0x0001FB00\r
11    userram     (RWX) : ORIGIN = 0x20000000, LENGTH = 0x00004000\r
12 }\r
13 \r
14 SECTIONS {\r
15 \r
16 # Heap and Stack sizes definition\r
17         ___heap_size      = 0x4;\r
18         ___stack_size     = 0x100;\r
19         \r
20 \r
21 \r
22 \r
23 # MCF52221 Derivative Memory map definitions from linker command files:\r
24 # __IPSBAR, __RAMBAR, __RAMBAR_SIZE, __FLASHBAR, __FLASHBAR_SIZE linker\r
25 # symbols must be defined in the linker command file.\r
26 \r
27 # Memory Mapped Registers (IPSBAR= 0x40000000)\r
28    ___IPSBAR         = 0x40000000;\r
29 \r
30 # 16 Kbytes Internal SRAM\r
31    ___RAMBAR         = 0x20000000;\r
32    ___RAMBAR_SIZE    = 0x00004000;\r
33 \r
34 # 128 KByte Internal Flash Memory\r
35    ___FLASHBAR       = 0x00000000;\r
36    ___FLASHBAR_SIZE  = 0x00020000;\r
37 \r
38    ___SP_AFTER_RESET = ___RAMBAR + ___RAMBAR_SIZE - 4;\r
39    \r
40   .userram        : {} > userram                \r
41   .code     : {} > code         \r
42         \r
43         .vectors :\r
44         {\r
45                 exceptions.c(.vectortable)\r
46                 . = ALIGN (0x4); \r
47         } > vectorrom\r
48 \r
49         .cfmprotect :\r
50         {\r
51                 *(.cfmconfig)\r
52                 . = ALIGN (0x4);\r
53         } > cfmprotrom\r
54 \r
55         .text :\r
56         {\r
57                 *(.text)\r
58                 . = ALIGN (0x4);\r
59                 *(.rodata)\r
60                 . = ALIGN (0x4);                \r
61                 ___ROM_AT = .;\r
62                 ___DATA_ROM = .;\r
63         } >> code\r
64 \r
65         .data : AT(___ROM_AT) \r
66         {  \r
67                 ___DATA_RAM = .;\r
68                 . = ALIGN(0x4);\r
69                 *(.exception)   \r
70                 . = ALIGN(0x4); \r
71                 __exception_table_start__ = .;\r
72                 EXCEPTION\r
73                 __exception_table_end__ = .;\r
74                 \r
75                 ___sinit__ = .;\r
76             STATICINIT\r
77                 __START_DATA = .;\r
78 \r
79                 *(.data)\r
80                 . = ALIGN (0x4);\r
81                 __END_DATA = .;\r
82 \r
83                 __START_SDATA = .;\r
84                 *(.sdata)\r
85                 . = ALIGN (0x4);\r
86                 __END_SDATA = .;\r
87 \r
88                 ___DATA_END = .;\r
89                 __SDA_BASE = .;\r
90                 . = ALIGN (0x4);\r
91         } >> userram\r
92 \r
93         .bss :\r
94         {\r
95                 ___BSS_START = .;\r
96                 __START_SBSS = .;\r
97                 *(.sbss)\r
98                 . = ALIGN (0x4);\r
99                 *(SCOMMON)\r
100                 __END_SBSS = .;\r
101 \r
102                 __START_BSS = .;\r
103                 *(.bss)\r
104                 . = ALIGN (0x4);\r
105                 *(COMMON)\r
106                 __END_BSS = .;\r
107                 ___BSS_END = .;\r
108 \r
109                 . = ALIGN(0x4);\r
110         } >> userram\r
111 \r
112         .custom :\r
113         {\r
114                 ___HEAP_START   = .;\r
115                 ___heap_addr    = ___HEAP_START;\r
116                 ___HEAP_END             = ___HEAP_START + ___heap_size;\r
117                 ___SP_END               = ___HEAP_END;\r
118                 ___SP_INIT              = ___SP_END + ___stack_size;\r
119 \r
120                 . = ALIGN (0x4);\r
121         } >> userram\r
122         \r
123 #       ___VECTOR_RAM           = ADDR(.vectorram);\r
124         \r
125         __SP_INIT               = ___SP_INIT;\r
126 \r
127         _romp_at = ___ROM_AT + SIZEOF(.data);\r
128         .romp : AT(_romp_at)\r
129         {\r
130                 __S_romp = _romp_at;\r
131                 WRITEW(___ROM_AT);\r
132                 WRITEW(ADDR(.data));\r
133                 WRITEW(SIZEOF(.data));\r
134                 WRITEW(0);\r
135                 WRITEW(0);\r
136                 WRITEW(0);\r
137         }\r
138 \r
139 }