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

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-3 13:45:01
自己搞定了 没人讨论 答案就不贴了
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里该怎么做?

所属标签

相似问题

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