【问题标题】:GCC LD variable section sizeGCC LD 可变节大小
【发布时间】:2015-12-31 00:52:51
【问题描述】:

在阅读了this Embedded Gurus article 关于堆栈溢出的内容后,我有兴趣在嵌入式(裸机 ARM)项目中反转静态 RAM 和堆栈的顺序。见下图:

当前:所有静态 RAM 数据都放入整个 RAM 部分。 “堆栈开始”地址固定在最高 RAM 地址,并作为链接器定义的符号提供。

反转:如果“静态变量”部分的大小是固定的,但大小会随着变量的添加/删除而变化,这将很简单。我想做的是将所有静态 RAM 数据放入 RAM 的末尾,然后根据静态 RAM 数据的大小确定堆栈应该从哪里开始。该“堆栈开始”地址将作为链接器定义的符号提供。

有没有办法让一个可变大小的部分在整个 RAM 部分的末尾保存静态 RAM 数据?如果不是,如何在不需要固定大小的静态 RAM 数据部分的情况下实现这种反转?

【问题讨论】:

    标签: gcc linker g++ embedded ld


    【解决方案1】:

    我不认为 gcc 链接器描述符允许您固定节的末尾并让它向下增长。我认为青山允许这样做,而基尔则不允许。

    但是,您可能并不是真的想做自己想做的事。您应该有意识地调整堆栈的大小,而不是依赖硬件来解决您的问题,特别是如果它真的很重要(即安全至关重要)。

    此外,不能保证您的单片机在访问物理 RAM 之外时确实会出现硬故障。这取决于实现。

    【讨论】:

    • 这里的目标是“尽可能大”地调整堆栈的大小,同时强制执行故意的最小大小。虽然将堆栈固定为项目确定的大小是可以接受的,但也可以为堆栈分配未使用的 RAM。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-27
    • 2012-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-03
    • 2015-02-10
    相关资源
    最近更新 更多