【问题标题】:lpcxpresso with Cortex-M3: what is libc.a(lib_a-impure.o) any why is it using 1k of ram?lpcxpresso with Cortex-M3:什么是 libc.a(lib_a-impure.o) 为什么它使用 1k 的 ram?
【发布时间】:2013-07-07 19:08:42
【问题描述】:

我希望这不是针对特定领域的。我想知道为什么 libc.a 使用我芯片上的 8K 内存中的 1K。

除了调用 array_init 中的全局对象的构造函数之外,我不知道我使用 libc 的任何方式。据我所知,我认为它也涉及默认副本构建。我使用池分配,所以没有与堆相关的东西(我确实使用了placement new,但据我所知,这不应该导致libc使用ram)。如果我完全省略了库并使用placement new 作为hack 来构造我在main 中的所有全局对象,我的程序运行良好,这是另一个暗示libc 使用的1k ram 是无用的。谁能指点我进一步阅读或解释我如何保持 array_init 和 POD 类型的默认副本构造,但摆脱 RAM 开销?

这是我项目的 .map 文件中的违规条目:

 *(vtable)
 *(.data*)
 .data._ZN3CDC4CoreI5MyCDCE11depInEmpty_E
                0x10000000        0x1 ./src/Main.o
                0x10000000                CDC::Core<MyCDC>::depInEmpty_
 *fill*         0x10000001        0x3 00
 .data.SystemFrequency
                0x10000004        0x4 ./kvasir/system_LPC17xx.o
                0x10000004                SystemFrequency
 .data.impure_data
                0x10000008      0x428 c:/nxp/lpcxpresso_5.2.4_2122/lpcxpresso/tools/bin/../lib/gcc/arm-none-eabi/4.6.2/../../../../arm-none-eabi/lib/armv7-m\libc.a(lib_a-impure.o)
 .data          0x10000430        0x4 c:/nxp/lpcxpresso_5.2.4_2122/lpcxpresso/tools/bin/../lib/gcc/arm-none-eabi/4.6.2/armv7-m\crtbegin.o
                0x10000430                __dso_handle
                0x10000434                . = ALIGN (0x4)
                0x10000434                _edata = .

.jcr            0x10000434        0x0 load address 0x00003ee8
 .jcr           0x10000434        0x0 c:/nxp/lpcxpresso_5.2.4_2122/lpcxpresso/tools/bin/../lib/gcc/arm-none-eabi/4.6.2/armv7-m\crtbegin.o

.bss            0x10000434     0x1600 load address 0x00003ee8
                0x10000434                _bss = .
 *(.bss*)
 .bss.inBuf     0x10000434       0x34 ./src/Main.o
                0x10000434                inBuf

更新

在逐行检查我的代码后,我找到了一个修复方法,我在我的一个类中定义了一个空析构函数

~MyClass(){}

评论删除了 1K 的 ram。谁能告诉我为什么?

【问题讨论】:

标签: c++ libc cortex-m3


【解决方案1】:

在阅读了一些 newLib 代码之后,在我看来,这是由一些正在加载的多线程内容引起的。我通过不声明任何非默认析构函数解决了这个问题。我已经读到 newLib nano 可以解决这个问题,但我还没有测试过,因为我的 IDE 还不支持它。

【讨论】:

    【解决方案2】:

    这不是您问题的直接解决方案,但可能是一个线索。 impure_data 部分是库的重入支持的一部分。 http://web.archive.org/web/20090106124055/http://venus.billgatliff.com/node/3

    我想知道如果该部分消失,您是否使用-ffunction-sections -fdata-sections 重建库?听起来你从图书馆打电话给珍贵的小东西,所以这可能是有效的。否则,你可能会被困在 newlib 上,或者只是借用你真正想要的部分。

    【讨论】:

    • 我宁愿不碰 LIB,因为我对它的复杂性知之甚少。但无论如何谢谢。
    猜你喜欢
    • 1970-01-01
    • 2021-09-16
    • 2010-12-02
    • 1970-01-01
    • 2011-08-22
    • 2020-03-24
    • 1970-01-01
    • 2017-07-06
    • 1970-01-01
    相关资源
    最近更新 更多