我正在使用 STM32F4 (Cortex-M4) MCU 并使用 arm-none-eabi-g++ 进行编译(我正在使用 C++)。
我需要减少将二进制文件上传到 MCU 闪存所需的时间。我发现我可以通过仅在修改之间将更改上传到我的二进制文件来做到这一点。然而,编译器正在生成一些有趣的代码,这使得这变得不可能。
考虑以下 2 个程序:
(1)
int main()
{
printf("hello");
return 0
}
(2)
int main()
{
//printf("hello");
return 0
}
通过简单地删除printf
调用,二进制文件完全不同。我可以通过反汇编代码来看到这一点arm-none-eabi-objdump -D mybinary
。以下是 WinMerge 中的差异示例:
从图中可以看出,几乎所有函数的stmdaeq
指令都略有不同,我想了解更多。
这个问题的答案将包括以下内容:
- 我知道
stmdaeq
指令是什么,但为什么它几乎在所有功能的末尾?这是函数的结尾吗? - 我能做些什么(编译器选项或其他)来确保小的代码更改(如我上面的示例)不会在整个二进制文件中导致此类更改?
我正在使用GNU Tools for ARM Embedded Processors GCC 工具链。
您的帮助将不胜感激。