各位大神,
我用GCC编译器生成了bootloader,请问怎么把代码从flash拷贝到ram运行?这是我的链接脚本文件:
/*----------------------------------------------------------------------------*/ /* sys_link.ld*/ /**/ /* (c) Texas Instruments 2009-2013, All rights reserved.*/ /**/ /*----------------------------------------------------------------------------*/ /* Entry Point */ ENTRY(_c_int00) /* Highest address of the stack */ _estack = 0x8040000;/* end of 256K RAM */ /* Generate a link error if heap and stack don't fit into RAM */ _Min_Heap_Size = 0x400;/* required amount of heap */ /* Specify the memory areas */ MEMORY {VECTORS(rx): ORIGIN = 0x00000000, LENGTH = 0x00000020FLASH (rx): ORIGIN = 0x00000020, LENGTH = (0x0017FFE0 + 0x00180000)CPU_STACK (rw) : ORIGIN = 0x08000000, LENGTH = 0x00001500 /* Stack is configured in sys_core.asm */RAM (xrw): ORIGIN = 0x08001500, LENGTH = 0x0003EB00MEMORY_B1 (rx) : ORIGIN = 0x60000000, LENGTH = 0K } /* Define output sections */ SECTIONS {/* The ISR vector goes first into RAM */.intvecs :{. = ALIGN(4);KEEP(*(.intvecs)) /* ISR vector */. = ALIGN(4);} >VECTORS/* The program code and other data goes into RAM */.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 RAM */.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.*) } >RAM.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/* 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;} >RAMPROVIDE ( end = _ebss );PROVIDE ( _end = _ebss );/* MEMORY_bank1 section, code must be located here explicitly*//* Example: extern int foo(void) __attribute__ ((section (".mb1text"))); */.memory_b1_text :{*(.mb1text)/* .mb1text sections (code) */*(.mb1text*)/* .mb1text* sections (code) */*(.mb1rodata)/* read-only data (constants) */*(.mb1rodata*)} >MEMORY_B1/* Remove information from the standard libraries *//DISCARD/ :{libc.a ( * )libm.a ( * )libgcc.a ( * )}.ARM.attributes 0 : { *(.ARM.attributes) } }
Susan Yang:
我看您在E2E上也发了帖子,并且有工程师回复了。请您继续跟踪该帖,QJ Wang是Hercules的资深专家