stm32769i-disco 板使用外部sdram的问题
大家好,刚接触stm32,我自己用MDK5搭了一个交叉编译环境,我的板子是stm32769i,外挂128Mb sdram,现在需要链接一个外部库,但是这个库的bss段太大,放不进sram里去,所以bss段只有放外部sdram里了,按照网上的教程,替换了交叉编译的startup_stm32f769xx.s,添加了STM32F769NIHx_FLASH.ld文件DATA_IN_ExtSDRAM这个宏也添加了,现在一运行就进hard fault,
我的想法是把堆栈段放sram,bss段放sdram,程序运行在sdram,下面是我的ld文件,大家帮忙看下,
或者直接把堆栈也放进sdram里,该怎么整
另外 _estack = 0x20080000; 为什么是这个地址,可以是其他么?
盼回复,谢谢!!
/* Generated by LinkerScriptGenerator [http://visualgdb.com/tools/LinkerScriptGenerator]
* Target: STM32F767IG
* The file is provided under the BSD license.
*/
ENTRY(Reset_Handler)
_Min_Heap_Size = 0x2000; /* required amount of heap*/
_Min_Stack_Size = 0x4000; /* required amount of stack */
MEMORY
{
FLASH (RX) : ORIGIN = 0x08000000, LENGTH = 2M
SRAM (RWX) : ORIGIN = 0x20000000, LENGTH = 512K
/* --- begin generated external memories -- */
BSS (RWX) : ORIGIN = 0xc0000000, LENGTH = 2M
SDRAM (RWX) : ORIGIN = 0xc0200000, LENGTH = 14M
/* --- end generated external memories -- */
}
_estack = 0x20080000;
SECTIONS
{
.isr_vector :
{
. = ALIGN(4);
KEEP(*(.isr_vector))
. = ALIGN(4);
} > FLASH
.text :
{
. = ALIGN(4);
_stext = .;
*(.text)
*(.text*)
*(.rodata)
*(.rodata*)
*(.glue_7)
*(.glue_7t)
KEEP(*(.init))
KEEP(*(.fini))
. = ALIGN(4);
_etext = .;
} > FLASH
.ARM.extab :
{
. = ALIGN(4);
*(.ARM.extab)
*(.gnu.linkonce.armextab.*)
. = ALIGN(4);
} > FLASH
.exidx :
{
. = ALIGN(4);
PROVIDE(__exidx_start = .);
*(.ARM.exidx*)
. = ALIGN(4);
PROVIDE(__exidx_end = .);
} > FLASH
.ARM.attributes :
{
*(.ARM.attributes)
} > FLASH
.preinSRAMit_array :
{
PROVIDE(__preinit_array_start = .);
KEEP(*(.preinit_array*))
PROVIDE(__preinit_array_end = .);
} > FLASH
.init_array :
{
PROVIDE(__init_array_start = .);
KEEP(*(SORT(.init_array.*)))
KEEP(*(.init_array*))
PROVIDE(__init_array_end = .);
} > FLASH
.fini_array :
{
PROVIDE(__fini_array_start = .);
KEEP(*(.fini_array*))
KEEP(*(SORT(.fini_array.*)))
PROVIDE(__fini_array_end = .);
} > FLASH
. = ALIGN(4);
_sidata = .;
.data : AT(_sidata)
{
. = ALIGN(4);
_sdata = .;
PROVIDE(__data_start__ = _sdata);
*(.data)
*(.data*)
. = ALIGN(4);
_edata = .;
PROVIDE(__data_end__ = _edata);
} > SRAM
.bss :
{
. = ALIGN(4);
_sbss = .;
PROVIDE(__bss_start__ = _sbss);
*(.bss)
*(.bss*)
*(COMMON)
. = ALIGN(4);
_ebss = .;
PROVIDE(__bss_end__ = _ebss);
} > BSS
/* --- begin generated external memory sections -- */
. = _sidata + SIZEOF(.data);
. = ALIGN(4);
_sisdram_text = .;
.sdram_text : AT(_sisdram_text)
{
. = ALIGN(4);
_ssdram_text = .;
PROVIDE(__sdram_text_start = _ssdram_text);
*(.sdram_text)
*(.sdram_text*)
. = ALIGN(4);
_esdram_text = .;
PROVIDE(__sdram_text_end = _esdram_text);
} > SDRAM
. = _sisdram_text + SIZEOF(.sdram_text);
. = ALIGN(4);
_sisdram_data = .;
.sdram_data : AT(_sisdram_data)
{
. = ALIGN(4);
_ssdram_data = .;
PROVIDE(__sdram_data_start = _ssdram_data);
*(.sdram_data)
*(.sdram_data*)
. = ALIGN(4);
_esdram_data = .;
PROVIDE(__sdram_data_end = _esdram_data);
} > SDRAM
/* --- end generated external memory sections -- */
._user_heap_stack :
{
. = ALIGN(8);
PROVIDE ( end = . );
PROVIDE ( _end = . );
. = . + _Min_Heap_Size;
. = . + _Min_Stack_Size;
. = ALIGN(8);
} >SRAM
/* Remove information from the standard libraries */
/DISCARD/ :
{
libc.a ( * )
libm.a ( * )
libgcc.a ( * )
}
.ARM.attributes 0 : { *(.ARM.attributes) }
} 没人嘛自己顶一下 没人这么用过么大家都来讨论下 大神都去哪了,想把bss段定义到外部sdram里该怎么做? 自己搞定了 没人讨论 答案就不贴了
页:
[1]