Eclipse CDT&STM32:强制预定义程序存储器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Eclipse CDT&STM32:强制预定义程序存储器相关的知识,希望对你有一定的参考价值。

我有一个罕见的案例,但在我看来是合理的用例:我必须构建两个STM32固件映像:一个引导程序和一个应用程序(通过使用来自ST Microelectronics的最新的基于Eclipse CDT的IDE,称为“ STM32CubeIDE”)。

因为我的约束主要是低功耗而不是安全性,所以我只对DFU(设备固件升级)方案的数据完整性有要求,为此,我对整个FW图像实施了CRC32检查。棘手的部分是,固件本身将其实际大小包含在代码存储器中固定偏移地址0x200的C结构中(此设计的好处是,不必传输完整的代码存储器,而需要传输固件始终受CRC32保护):

固件的布局是这样的:

<ISR Table> <FW-Header@FixedAddress0x200> <RestFWCode> " + CRC32
  1. FW标头包含FW大小
  2. boobooloader用于刷新应用程序的完整FW大小是存储的FW大小(请参阅1.。)+附加的CRC32的4字节

对于我的实现,我需要用实际的FW大小替换“ FW Header”区域中的内存区域(仅在构建过程之后可用。)>

为此,我制作了一个python脚本来修补二进制“ * .bin”文件,但似乎Eclipse / GDB使用它来调试ELF文件,与之相比,定制补丁对我来说要复杂得多。二进制图像,因为我发现没有简便的方法(替换实际的固件大小并附加CRC32的4个字节)。

因此,我认为最简单的方法是在固件从调试器获得加载程序后立即修补代码存储器。我成功测试了来自ST的命令行工具,该工具甚至可以在代码存储器中操作任意内存(我的代码存储器从0x08000000开始+应用程序位于偏移量0x4000和FW标头位于öffset0x200-> 0x08004200):

ST-LINK_CLI.exe -c SWD -w32 0x08004200 0xAABBCCDD

(请参阅:https://www.st.com/resource/en/user_manual/cd00262073.pdf

我的问题是,在调试器连接到MCU之前,我不知道如何启动此简单的EXE调用...我尝试了“调试配置”->“启动”->“运行命令”,但是没有成功...

有人知道如何实现这一目标吗?

[我有一个罕见的案例,但在我看来是合理的用例:我必须构建两个STM32固件映像:一个引导程序和一个应用程序(通过使用来自ST Microelectronics的最新的基于Eclipse CDT的IDE,...

答案
开始调试会话之前运行程序可以使用位于Debug Configurations(调试配置)下的Eclipse的“ Launch group(启动组)”来完成,例如顶部菜单->运行->调试配置。

以上是关于Eclipse CDT&STM32:强制预定义程序存储器的主要内容,如果未能解决你的问题,请参考以下文章

eclipse编写STM32与Jlink调试

STM32CubeIDE 编译C/C++程序

使用Eclipse+jlink调试STM32

使用 Eclipse + CDT + MinGW32 开发 C++ Socket 程序找不到库文件和头文件

STM32CubeIDE 终止前的无头构建延迟

使用 Eclipse CDT 创建凭据提供程序