如何将带构建偏移的 PlatformIO 固件转换为不带偏移的固件

一些固件构建时带有构建偏移,以为在固件之前启动的引导加载程序留出闪存空间(如 32k - 0x8000)。使用此类固件的缺点之一是它始终依赖于存在兼容的引导加载程序(兼容性主要由为引导加载程序分配的闪存量定义)

如果你想将固件转换为"正常"的非引导加载程序固件,你需要做以下事情:

查找类似这样的 MEMORY 部分:

linker_memory_section.ld
MEMORY
{
FLASH (rx)      : ORIGIN = 0x8008000, LENGTH = 512K
RAM (xrw)      : ORIGIN = 0x20000000, LENGTH = 128K
}

如你在

linker_flash_origin.txt
FLASH (rx) : ORIGIN = 0x8008000, LENGTH = 512K

中看到的,此 STM32(示例)的闪存不在 MCU 的闪存地址 0x8000000,而在 0x8008000 - 基本上,链接器被告知跳过引导加载程序占用的 0x8000(32k)(否则,它会覆盖引导加载程序。

将此更改为你的 MCU 的闪存地址。对于像 STM32 这样的 ARM,这通常是 0x8000000

现在重新编译,你的固件应该无需引导加载程序即可工作。


Check out similar posts by category: Embedded, PlatformIO, STM32