PlatformIO 不会在 VS Code 中创建 firmware.bin

PlatformIO will not create firmware.bin in VS Code

我下载了一些固件的更新版本,需要编译成firmware.bin文件,(firmware.hex不行)。大多数在线教程都说为此使用 PlatformIO,但每当我构建固件时,一切都按计划进行,编译没有任何错误,并说它成功了。然而,在大多数 YouTube 视频或在线文档中,最后几行包含类似

的内容
Archiving .pio\build\mega2560\libFrameworkArduino.a
Archiving .pio\build\mega2560\lib9e6\libU8glib-HAL_ID1932.a
Linking .pio\build\mega2560\firmware.elf
Building .pio\build\mega2560\firmware.hex
Checking size .pio\build\mega2560\firmware.elf
Building .pio\build\mega2560\firmware.bin
RAM:   [======    ]  60.6% (used 4963 bytes from 8192 bytes)
Flash: [======    ]  63.7% (used 161682 bytes from 253952 bytes)
================================================ [SUCCESS] Took 222.23 seconds ================================================

虽然我的看起来像这样:

Archiving .pio\build\mega2560\libFrameworkArduino.a
Archiving .pio\build\mega2560\lib9e6\libU8glib-HAL_ID1932.a
Linking .pio\build\mega2560\firmware.elf
Building .pio\build\mega2560\firmware.hex
Checking size .pio\build\mega2560\firmware.elf
RAM:   [======    ]  60.6% (used 4963 bytes from 8192 bytes)
Flash: [======    ]  63.7% (used 161682 bytes from 253952 bytes)
================================================ [SUCCESS] Took 222.23 seconds ================================================

果然,有 firmware.elffirmware.hex,但没有 firmware.binMany other places 说 platformio 默认创建一个 .bin 文件,所以我不认为这是我忘记做的事情,但那是什么?我是否需要编辑我的 Platformio.ini 文件或其他内容?

我在为 arduino 构建时遇到了同样的问题。我找到的解决方法是在工作区添加一个extra_script.py文件,编译之后的bin。

参考资料

基本上您想将 extra_scripts 行添加到您的 platformio.ini 文件

; you env might be different to might platform, board and framework be
[env:nanoatmega328]
platform = atmelavr
board = nanoatmega328
framework = arduino

extra_scripts = post:extra_script.py

extra_script.py 文件与 platformio.ini 位于同一文件夹中,并且

from os.path import join
Import("env", "projenv")

# Custom BIN from ELF
env.AddPostAction(
    "$BUILD_DIR/${PROGNAME}.elf",
    env.VerboseAction(" ".join([
                "$OBJCOPY",
                "-O",
                "binary",
                "$TARGET",
                "$BUILD_DIR/${PROGNAME}.bin"
            ]), "Building $TARGET"))