# Sample Linker Command File for CodeWarrior for ColdFire KEEP_SECTION {.vectortable} # Memory ranges MEMORY { vectorrom (RX) : ORIGIN = 0x00000000, LENGTH = 0x00000400 cfmprotrom (RX) : ORIGIN = 0x00000400, LENGTH = 0x00000020 code (RX) : ORIGIN = 0x00000500, LENGTH = 0x0001FB00 userram (RWX) : ORIGIN = 0x20000000, LENGTH = 0x00004000 } SECTIONS { # Heap and Stack sizes definition ___heap_size = 0x4; ___stack_size = 0x100; # MCF52221 Derivative Memory map definitions from linker command files: # __IPSBAR, __RAMBAR, __RAMBAR_SIZE, __FLASHBAR, __FLASHBAR_SIZE linker # symbols must be defined in the linker command file. # Memory Mapped Registers (IPSBAR= 0x40000000) ___IPSBAR = 0x40000000; # 16 Kbytes Internal SRAM ___RAMBAR = 0x20000000; ___RAMBAR_SIZE = 0x00004000; # 128 KByte Internal Flash Memory ___FLASHBAR = 0x00000000; ___FLASHBAR_SIZE = 0x00020000; ___SP_AFTER_RESET = ___RAMBAR + ___RAMBAR_SIZE - 4; .userram : {} > userram .code : {} > code .vectors : { exceptions.c(.vectortable) . = ALIGN (0x4); } > vectorrom .cfmprotect : { *(.cfmconfig) . = ALIGN (0x4); } > cfmprotrom .text : { *(.text) . = ALIGN (0x4); *(.rodata) . = ALIGN (0x4); ___ROM_AT = .; ___DATA_ROM = .; } >> code .data : AT(___ROM_AT) { ___DATA_RAM = .; . = ALIGN(0x4); *(.exception) . = ALIGN(0x4); __exception_table_start__ = .; EXCEPTION __exception_table_end__ = .; ___sinit__ = .; STATICINIT __START_DATA = .; *(.data) . = ALIGN (0x4); __END_DATA = .; __START_SDATA = .; *(.sdata) . = ALIGN (0x4); __END_SDATA = .; ___DATA_END = .; __SDA_BASE = .; . = ALIGN (0x4); } >> userram .bss : { ___BSS_START = .; __START_SBSS = .; *(.sbss) . = ALIGN (0x4); *(SCOMMON) __END_SBSS = .; __START_BSS = .; *(.bss) . = ALIGN (0x4); *(COMMON) __END_BSS = .; ___BSS_END = .; . = ALIGN(0x4); } >> userram .custom : { ___HEAP_START = .; ___heap_addr = ___HEAP_START; ___HEAP_END = ___HEAP_START + ___heap_size; ___SP_END = ___HEAP_END; ___SP_INIT = ___SP_END + ___stack_size; . = ALIGN (0x4); } >> userram # ___VECTOR_RAM = ADDR(.vectorram); __SP_INIT = ___SP_INIT; _romp_at = ___ROM_AT + SIZEOF(.data); .romp : AT(_romp_at) { __S_romp = _romp_at; WRITEW(___ROM_AT); WRITEW(ADDR(.data)); WRITEW(SIZEOF(.data)); WRITEW(0); WRITEW(0); WRITEW(0); } }