首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用GNU ld创建一个空节?

如何使用GNU ld创建一个空节?
EN

Stack Overflow用户
提问于 2012-01-15 22:45:37
回答 1查看 4.4K关注 0票数 2

我在做一个皮质-立方米芯片。堆栈空间是在源代码中使用bss部分上的未初始化数组保留的。我使用的链接器脚本如下:

代码语言:javascript
复制
MEMORY
{
    FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 256k
    SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 64k
}

SECTIONS {
    .text : {
        KEEP(*(.isr_vector))
        *(.text*)
        *(.rodata*)
        __text_end = .;
    } >FLASH

    .data : {
        __data_start = .;
        *(.data*)
        __data_end = .;
    } >SRAM AT>FLASH

    .bss : {
        __bss_start = .;
        *(.bss*)
        __bss_end = .;
    } >SRAM
}

我尝试在SRAM区域的开头为堆栈分配一个部分,这样我就可以检测出现使用错误的堆栈溢出。

我添加了一个名为.stack的部分:

代码语言:javascript
复制
SECTIONS {
    .text : {
        :
    } >FLASH

    .stack : {
        __stack_size = 4k;
        __stack_start = .;
        . = . + __stack_size;
        . = ALIGN(8);         /* cortex-m3 uses full-descending stack aligned with 8 bytes */
        __stack_end = .;
    } >SRAM

    .data : {
        :
    } >SRAM AT>FLASH

    .bss : {
        :
    } >SRAM
}

链接完成时没有任何错误或警告,但问题是__stack_end不在静态随机存储器区域,而在闪存区域。

我知道我可以使用__attribute__给出的一个单独的节(( section (“name”),但我认为如果我能在链接器脚本中处理它会更好。

如何在SRAM区域上创建一个空白部分?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-28 01:49:01

只需将RAM区域一分为二:

代码语言:javascript
复制
MEMORY
{
    FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 256k
    SRAM_STACK (rwx) : ORIGIN = 0x20000000, LENGTH = 4k
    SRAM (rwx) : ORIGIN = 0x20001000, LENGTH = 60k
}
SECTIONS {
.text : {
    KEEP(*(.isr_vector))
    *(.text*)
    *(.rodata*)
    __text_end = .;
} >FLASH

.data : {
     __data_start = .;
    *(.data*)
    __data_end = .;
} >SRAM AT>FLASH

.bss : {
    __bss_start = .;
    *(.bss*)
    __bss_end = .;
} >SRAM

.stack : {
    __stack_size = 4k;
    __stack_start = .;
    . = . + __stack_size;
    . = ALIGN(8);         /* cortex-m3 uses full-descending stack aligned with 8 bytes */
    __stack_end = .;
} >SRAM_STACK

}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8870548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档