| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209 | /***********************************************************************************  File        : LinkerScript.ld****  Author		: Auto-generated by Ac6 System Workbench****  Abstract    : Linker script for STM32F407VGTx series**                1024Kbytes FLASH and 128Kbytes RAM****                Set heap size, stack size and stack location according**                to application requirements.****                Set memory bank area and size if external memory is used.****  Target      : STMicroelectronics STM32****  Distribution: The file is distributed ¡§as is,¡¨ without any warranty**                of any kind.********************************************************************************* @attention**** <h2><center>© COPYRIGHT(c) 2014 Ac6</center></h2>**** Redistribution and use in source and binary forms, with or without modification,** are permitted provided that the following conditions are met:**   1. Redistributions of source code must retain the above copyright notice,**      this list of conditions and the following disclaimer.**   2. Redistributions in binary form must reproduce the above copyright notice,**      this list of conditions and the following disclaimer in the documentation**      and/or other materials provided with the distribution.**   3. Neither the name of Ac6 nor the names of its contributors**      may be used to endorse or promote products derived from this software**      without specific prior written permission.**** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE** DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE** FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL** DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR** SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER** CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,** OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.********************************************************************************//* Entry Point */ENTRY(Reset_Handler)/* Highest address of the user mode stack */_estack = 0x20020000;    /* end of RAM *//* Generate a link error if heap and stack don't fit into RAM */_Min_Heap_Size = 0x2000;      /* required amount of heap  */_Min_Stack_Size = 0x4000; /* required amount of stack *//* Specify the memory areas */MEMORY{RAM (xrw)      : ORIGIN = 0x20000000, LENGTH = 128KCCMRAM (rw)      : ORIGIN = 0x10000000, LENGTH = 64KFLASH (rx)      : ORIGIN = 0x8000000, LENGTH = 1024K}/* Define output sections */SECTIONS{  /* The startup code goes first into FLASH */  .isr_vector :  {    . = ALIGN(4);    KEEP(*(.isr_vector)) /* Startup code */    . = ALIGN(4);  } >FLASH  /* The program code and other data goes into FLASH */  .text :  {    . = ALIGN(4);    *(.text)           /* .text sections (code) */    *(.text*)          /* .text* sections (code) */    *(.glue_7)         /* glue arm to thumb code */    *(.glue_7t)        /* glue thumb to arm code */    *(.eh_frame)    KEEP (*(.init))    KEEP (*(.fini))    . = ALIGN(4);    _etext = .;        /* define a global symbols at end of code */  } >FLASH  /* Constant data goes into FLASH */  .rodata :  {    . = ALIGN(4);    *(.rodata)         /* .rodata sections (constants, strings, etc.) */    *(.rodata*)        /* .rodata* sections (constants, strings, etc.) */    . = ALIGN(4);  } >FLASH  .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH  .ARM : {    __exidx_start = .;    *(.ARM.exidx*)    __exidx_end = .;  } >FLASH  .preinit_array     :  {    PROVIDE_HIDDEN (__preinit_array_start = .);    KEEP (*(.preinit_array*))    PROVIDE_HIDDEN (__preinit_array_end = .);  } >FLASH  .init_array :  {    PROVIDE_HIDDEN (__init_array_start = .);    KEEP (*(SORT(.init_array.*)))    KEEP (*(.init_array*))    PROVIDE_HIDDEN (__init_array_end = .);  } >FLASH  .fini_array :  {    PROVIDE_HIDDEN (__fini_array_start = .);    KEEP (*(SORT(.fini_array.*)))    KEEP (*(.fini_array*))    PROVIDE_HIDDEN (__fini_array_end = .);  } >FLASH  /* used by the startup to initialize data */  _sidata = LOADADDR(.data);  /* Initialized data sections goes into RAM, load LMA copy after code */  .data :   {    . = ALIGN(4);    _sdata = .;        /* create a global symbol at data start */    *(.data)           /* .data sections */    *(.data*)          /* .data* sections */    . = ALIGN(4);    _edata = .;        /* define a global symbol at data end */  } >RAM AT> FLASH  _siccmram = LOADADDR(.ccmram);  /* CCM-RAM section   *   * IMPORTANT NOTE!   * If initialized variables will be placed in this section,  * the startup code needs to be modified to copy the init-values.    */  .ccmram :  {    . = ALIGN(4);    _sccmram = .;       /* create a global symbol at ccmram start */    *(.ccmram)    *(.ccmram*)        . = ALIGN(4);    _eccmram = .;       /* create a global symbol at ccmram end */  } >CCMRAM AT> FLASH    /* Uninitialized data section */  . = ALIGN(4);  .bss :  {    /* This is used by the startup in order to initialize the .bss secion */    _sbss = .;         /* define a global symbol at bss start */    __bss_start__ = _sbss;    *(.bss)    *(.bss*)    *(COMMON)    . = ALIGN(4);    _ebss = .;         /* define a global symbol at bss end */    __bss_end__ = _ebss;  } >RAM  /* User_heap_stack section, used to check that there is enough RAM left */  ._user_heap_stack :  {    . = ALIGN(8);    PROVIDE ( end = . );    PROVIDE ( _end = . );    . = . + _Min_Heap_Size;    . = . + _Min_Stack_Size;    . = ALIGN(8);  } >RAM    /* Remove information from the standard libraries */  /DISCARD/ :  {    libc.a ( * )    libm.a ( * )    libgcc.a ( * )  }  .ARM.attributes 0 : { *(.ARM.attributes) }}
 |