使用-objcopy-将-AXF-文件转换成-BIN-文件时文件过大

在 Linux 上配合 Keil 5 进行 STM32f103c8 单片机开发时, 先利用 Keil 5 中的 Build:

产生 AXF 文件:

之后用 arm-none-eabi-objcopy 命令将 AXF 文件转换为 BIN 文件, 然后利用 st-flash 将 BIN 文件烧录到 STM32f103c8 中:

1
2
arm-none-eabi-objcopy -O binary Project.axf test.bin
st-flash write test.bin 0x08000000

遇到报错:

通过报错可以得知这个 BIN 文件过大, 查看如下:

经网上搜查 (问了下 GPT), 得知可能原因为 BottonNum 这个全局变量, 在经 Botton_GetNum() 函数返回值修改, 并在 while 循环中被使用, 由于编译器无法确定 Botton_GetNum() 函数在每次调用时是否会返回不同的结果, 它可能会保留该变量的所有可能值, 以便在循环中的条件判断中进行处理, 从而导致生成的二进制文件巨大. (这里我并没有探明是不是这个原因)

因此将 BottonNum 声明为局部变量:

此时确实可以正常运行, 且 BIN 文件很小.


使用-objcopy-将-AXF-文件转换成-BIN-文件时文件过大
http://example.com/2024/03/26/使用-objcopy-将-AXF-文件转换成-BIN-文件时文件过大/
作者
Jie
发布于
2024年3月26日
许可协议