gpt4 book ai didi

c++ - C/C++ : How can I know the size of used flash memory?

转载 作者:太空宇宙 更新时间:2023-11-04 04:45:26 24 4
gpt4 key购买 nike

我最近遇到了闪存溢出问题。在代码上做了一些优化后,我节省了一些闪存并成功执行了软件。我想通过我的更改节省了多少闪存。请告诉我如何检查已用闪存/可用闪存。我还想了解特定功能/文件使用了多少闪存。

以下是关于我的开发环境的一些信息。 - 具有 64 k 内存和 512 K 闪存的 AVR 微 Controller 。 - 使用 freeRtos。 - 使用 GNU C++ 编译器。 - 使用 AVRATJTAGEICE 进行编程和调试。

请告诉我解决方案。

问候,贾加迪普。

最佳答案

海湾合作委员会的 size程序就是您要找的。


size可以通过全编译.elf文件。默认情况下,它会输出如下内容:

$ size linked-file.elf
text data bss dec hex filename
11228 112 1488 12828 321c linked-file.elf

这是在说:

There are 11228 bytes in the .text "section" of this file. This is generally for functions.
There are 112 bytes of initialized data: global variables in the program with initial values.
There are 1488 bytes of uninitialized data: global variables without initial values.

dec只是前 3 个值的总和:11228 + 112 + 1488 = 12828 .
hex只是 dec 的十六进制表示值:0x321c == 12828 .

对于嵌入式系统,一般是dec需要小于目标设备的闪存大小(或设备上的可用空间)。

通常只需观看 dec 就足够了或 text GCC 的输出 size命令来监视编译代码随时间变化的大小。大小的大幅跳跃通常表示新功能实现不当或 constexpr没有被编译掉。 (不要忘记 function-sectionsdata-sections)。

注意:对于 AVR,您需要使用 avr-size用于检查 AVR 的链接大小 .elf文件。 avr-size接受目标芯片的额外参数,并自动计算所选芯片的已用闪存百分比。


海湾合作委员会的 size也可以直接作用于中间目标文件。

如果您想检查函数的编译大小,这将特别有用。

您应该会看到类似以下摘录的内容:

$ size -A main.cpp.o
main.cpp.o :
section size addr
.group 8 0
.group 8 0
.text 0 0
.data 0 0
.bss 0 0
.text._Z8sendByteh 8 0
.text._ZN3XMC5IOpin7setModeENS0_4ModeE 64 0
.text._ZN7NamSpac6OptionIN5Clock4TimeEEmmEi 76 0
.text.Default_Handler 24 0
.text.HardFault_Handler 16 0
.text.SVC_Handler 16 0
.text.PendSV_Handler 16 0
.text.SysTick_Handler 28 0
.text._Z5errorPKc 8 0
.text._ZN7NamSpac5Motor2goEi 368 0
.text._ZN7NamSpac5Motor3getEv 12 0
.rodata.cst1 1 0
.text.startup.main 632 0
.text._ZN7NamSpac7Program3runEv 380 0
.text._ZN7NamSpac8Position4tickEv 24 0
.text.startup._GLOBAL__sub_I__ZN7NamSpac7displayE 292 0
.init_array 4 0
.bss._ZN5Debug9formatterE 4 0
.rodata._ZL10dispDigits 8 0
.bss.position 4 0
.bss.motorState 4 0
.bss.count 4 0
.rodata._ZL9diameters 20 0
.bss._ZN7NamSpac8diameterE 16 0
.bss._ZN5Debug3pinE 12 0
.bss._ZN7NamSpac7displayE 24 0
.rodata.str1.4 153 0
.rodata._ZL12dispSegments 32 0
.bss._ZL16diametersDisplay 10 0
.bss.loadAggregate 4 0
.bss.startCount 4 0
.bss._ZL15runtimesDisplay 10 0
.bss._ZN7NamSpac7runtimeE 16 0
.bss.startTime 4 0
.rodata._ZL8runtimes 20 0
.comment 111 0
.ARM.attributes 49 0
Total 2494

关于c++ - C/C++ : How can I know the size of used flash memory?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21562492/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com