- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我最近遇到了闪存溢出问题。在代码上做了一些优化后,我节省了一些闪存并成功执行了软件。我想通过我的更改节省了多少闪存。请告诉我如何检查已用闪存/可用闪存。我还想了解特定功能/文件使用了多少闪存。
以下是关于我的开发环境的一些信息。 - 具有 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 are112
bytes of initialized data: global variables in the program with initial values.
There are1488
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-sections
和 data-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/
我是一名优秀的程序员,十分优秀!