#----------------------------------------------------------------------------------------------------------------------## DEFINITION DES "MEMORY SEGMENTS" ## -------------------------------------------------------------------------------------------------------------------- ## Segment (RWX : Read,Write,eXecute) : ORIGIN = Memory address, LENGTH = Segment size (0x0 = Unlimited) ##----------------------------------------------------------------------------------------------------------------------#MEMORY{ CPU_IPSBAR (RWX) : ORIGIN = 0x40000000, LENGTH = 0x0 RAM_SDRAM (RWX) : ORIGIN = 0x00000000, LENGTH = 0x01000000 RAM_SDRAM_Vecteurs (RWX) : ORIGIN = 0x00000000, LENGTH = 0x00000400 RAM_SRAM (RWX) : ORIGIN = 0x20000000, LENGTH = 0x00010000 RAM_SRAM_Vecteurs (RWX) : ORIGIN = 0x20000000, LENGTH = 0x00000400 RAM_SRAM_Data (RWX) : ORIGIN = 0x20000400, LENGTH = 0x0000FC00 RAM_ProgSector (RWX) : ORIGIN = 0x00000000, LENGTH = 0x0 FLASH_BootSector (RWX) : ORIGIN = 0xFFE00000, LENGTH = 0x00004000 FLASH_Param1Sector (RWX) : ORIGIN = 0xFFE04000, LENGTH = 0x0 FLASH_Param2Sector (RWX) : ORIGIN = 0xFFE06000, LENGTH = 0x0 FLASH_EnvSector (RWX) : ORIGIN = 0xFFE08000, LENGTH = 0x0 FLASH_ProgSector (RWX) : ORIGIN = 0xFFE10000, LENGTH = 0x0}#----------------------------------------------------------------------------------------------------------------------## DEFINITION DES "SECTIONS SEGMENTS" ## -------------------------------------------------------------------------------------------------------------------- ## .SectionName : { Section Content } > Puts at the beginning of Memory segment (>> Appends to End) ##----------------------------------------------------------------------------------------------------------------------#SECTIONS{ #------------------------------------------------------------------------------------------------------------------# #- DECLARATION & AFFECTATION DES "SECTIONS SEGMENTS" AUX "MEMORY SEGMENTS" -# #------------------------------------------------------------------------------------------------------------------# .RAM_SDRAM : {} > RAM_SDRAM .RAM_Vecteurs : {} > RAM_SRAM_Vecteurs .CPU_IPSBAR : {} > CPU_IPSBAR .RAM_SRAM : {} > RAM_SRAM .RAM_SRAM_Data : {} > RAM_SRAM_Data .FLASH_BootSector : {} > FLASH_BootSector .FLASH_ProgSector : {} > FLASH_ProgSector #------------------------------------------------------------------------------------------------------------------# #- DEFINITION DES SYMBOLES GLOBAUX Utilisés dans l'application -# #------------------------------------------------------------------------------------------------------------------# ___IPSBAR = ADDR(.CPU_IPSBAR); ___VECTOR_RAM = ADDR(.RAM_Vecteurs); ___SDRAM = ADDR(.RAM_SDRAM); ___SDRAM_SIZE = 0x01000000; ___SRAM = ADDR(.RAM_SRAM); ___SRAM_SIZE = 0x00010000; ___EXT_FLASH = ADDR(.FLASH_BootSector); ___EXT_FLASH_SIZE = 0x00200000; ___SP_SIZE = 0x2000; #------------------------------------------------------------------------------------------------------------------# #- TABLE des VECTEURS ROM (Définitions des Vecteurs d'exception et d'interruption de l'application) -# # ---------------------------------------------------------------------------------------------------------------- # #- Section Chargée en FLASH, Recopiée en SRAM AT(___VECTOR_RAM) -# #------------------------------------------------------------------------------------------------------------------# .CODE_Vecteurs : { BSP_ColdfireVectors.o (.text) . = ALIGN (0x40); } >> FLASH_BootSector #------------------------------------------------------------------------------------------------------------------# #- BOOTSTART CODE & RUNTIME LIBRARY (Fonctions Initialisation Hardware et Recopie de l'application en SDRAM) -# # ---------------------------------------------------------------------------------------------------------------- # #- Section Chargée & Exécutée en FLASH -# #------------------------------------------------------------------------------------------------------------------# .CODE_Boot : { BSP_Asm_BootCode.o (.text) BSP_HardwareInit.o (.text) OBJECT(__ExitProcess, C_4i_CF_Runtime.a) OBJECT(_clear_mem, C_4i_CF_Runtime.a) OBJECT(__start, C_4i_CF_Runtime.a) OBJECT(___initialize_hardware, C_4i_CF_Runtime.a) OBJECT(___initialize_OS, C_4i_CF_Runtime.a) OBJECT(_simple_block_copy, C_4i_CF_Runtime.a) OBJECT(___copy_rom_section, C_4i_CF_Runtime.a) OBJECT(___copy_rom_sections_to_ram, C_4i_CF_Runtime.a) . = ALIGN (0x40); } >> FLASH_BootSector __EndOfBootSector = .; #------------------------------------------------------------------------------------------------------------------# #- EXECUTABLE CODE & READ-ONLY DATA (Code Application) -# # ---------------------------------------------------------------------------------------------------------------- # #- Section Chargée en FLASH AT(___CODE_ROM), Recopiée & Executée en SDRAM AT(___CODE_RAM) -# #------------------------------------------------------------------------------------------------------------------# ___CODE_ROM = ADDR(FLASH_ProgSector); ___CODE_RAM = ADDR(RAM_ProgSector); .text : AT(___CODE_ROM) { . = ALIGN (0x4); *(.text) . = ALIGN (0x40); *(.rodata) . = ALIGN (0x40); } > RAM_ProgSector #------------------------------------------------------------------------------------------------------------------# #- INITIALIZED DATA -# # ---------------------------------------------------------------------------------------------------------------- # #- Section Chargée en FLASH AT(___DATA_ROM), Recopiée en SDRAM AT(___DATA_RAM) -# #------------------------------------------------------------------------------------------------------------------# ___DATA_ROM = ___CODE_ROM + SIZEOF(.text); ___DATA_RAM = ADDR(RAM_ProgSector) + SIZEOF(.text); .data : AT(___DATA_ROM) { ___sinit__ = .; STATICINIT __START_DATA = .; *(.data) __END_DATA = .; __START_SDATA = .; *(.sdata) __END_SDATA = .; __SDA_BASE = .; . = ALIGN (0x40); } >> RAM_ProgSector #------------------------------------------------------------------------------------------------------------------# #- UNINITIALIZED DATA CLEARED TO ZERO -# # ---------------------------------------------------------------------------------------------------------------- # #- Section Chargée en SDRAM -# #------------------------------------------------------------------------------------------------------------------# .bss : { __START_SBSS = .; *(.sbss) *(SCOMMON) __END_SBSS = .; __START_BSS = .; *(.bss) *(COMMON) __END_BSS = .; . = ALIGN(0x4); } >> RAM_ProgSector #------------------------------------------------------------------------------------------------------------------# #- DEFINITION du HEAP MEMOIRE & PILE SYSTEME PROVISOIRE (PILE modifiée par CMX RTOS dans CMX_INIT.C) -# # ---------------------------------------------------------------------------------------------------------------- # #- Section Chargée en SDRAM -# #------------------------------------------------------------------------------------------------------------------# .custom : { . = ALIGN(0x4); ___HEAP_START = .; ___HEAP_END = ___SDRAM + ___SDRAM_SIZE - ___SP_SIZE; ___SP_END = ___HEAP_END; ___SP_INIT = ___SP_END + ___SP_SIZE; ___SP_INIT_SRAM = ___SRAM + ___SRAM_SIZE; # Pile Temporaire de Démmarage en SRAM ___SP_INIT = ___SP_INIT_SRAM; . = ALIGN (0x4); } >> RAM_ProgSector ___heap_addr = ___HEAP_START; ___heap_size = ___HEAP_END - ___HEAP_START ; __SP_INIT = ___SP_INIT; #------------------------------------------------------------------------------------------------------------------# #- TABLE de RECOPIE de la ROM vers la RAM utilisée par le code de démarrage de la RUNTIME LIBRARY -# # ---------------------------------------------------------------------------------------------------------------- # #- __S_romp = Séquence de 3 Words par section à recopier, la dernière section de la table doit être à zéro -# #- -# #- Section à recopier = { ROM Start Address -# #- RAM Start Address -# #- BLOCK Size -# #- } -# #------------------------------------------------------------------------------------------------------------------# _romp_at = ___DATA_ROM + SIZEOF(.data); .romp : AT(_romp_at) { __S_romp = _romp_at; WRITEW(___CODE_ROM); # FLASH CODE Address WRITEW(___CODE_RAM); # SDRAM CODE Address WRITEW(SIZEOF(.text)); # CODE Size WRITEW(___DATA_ROM); # FLASH Initialized DATA Address WRITEW(___DATA_RAM); # SDRAM Initialized DATA Address WRITEW(SIZEOF(.data)); # DATA Size WRITEW(0); # NULL Last Entry WRITEW(0); # NULL Last Entry WRITEW(0); # NULL Last Entry }}