首页 > 解决方案 > 是否可以让链接器生成一个二进制文件,尽可能接近先前生成的二进制文件?

问题描述

这是上下文:我使用微控制器,将生成的二进制文件写入内部闪存,并从那里执行。闪存以 4KiB 块进行擦除和写入。闪光器足够聪明,可以跳过不需要更改的块。

在开发过程中,通常每天进行数十次微小的更改并重新编译和重新刷写。

我想要实现的是,如果可能的话,让链接器尽可能地保留现有结构。例如,如果我在某处删除了一个 if-check,代码会变小几个字节,并且所有后续信息都会移动几个字节,因此整个闪存被擦除并重新编程。

如果链接器能够以某种方式在链接符号之间添加填充,则通常可以跳过闪存的大部分而不覆盖。当代码变大时,这显然不起作用。

是否有任何 gcc 选项可以帮助自动化此类任务(无需手工制作大量链接器脚本)?是否有任何编译器至少部分支持此类行为?

标签: linkerlinker-scriptsincremental-compilerincremental-linking

解决方案


推荐阅读