你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm32769i-disco 板使用外部sdram的问题

[复制链接]
mick_hf 提问时间:2017-5-2 11:12 /
大家好,刚接触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) }
}
<
收藏 1 评论4 发布时间:2017-5-2 11:12

举报

4个回答
mick_hf 回答时间:2017-5-2 12:01:51
没人嘛  自己顶一下
mick_hf 回答时间:2017-5-2 12:53:23
没人这么用过么  大家都来讨论下
mick_hf 回答时间:2017-5-2 17:02:49
大神都去哪了,想把bss段定义到外部sdram里该怎么做?
mick_hf 回答时间:2017-5-3 13:45:01
自己搞定了 没人讨论 答案就不贴了

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版