首页 > 解决方案 > 链接描述文件是否始终确定代码放置在哪些地址

问题描述

我大部分时间都在使用 Atmel Studio 等工具和 IDE 为微控制器进行开发,并对幕后发生的事情进行了抽象。

假设在这种情况下,我们直接从闪存执行代码,嵌入式系统可能就是这种情况。

当我们开发应用程序并使用芯片供应商提供的工具将其闪存到微控制器时,是加载器/闪存器确定将在内存中的哪个物理地址进行闪存?

我知道链接器脚本定义了内存偏移量,以决定不同部分(如 .data 和 .txt)应该放置在哪里,那么实际上这最终决定了 mcu flash 中的什么地址应该去哪里?

现在让我们说,我发现闪存的一部分根本没有使用,我希望在那里放一些其他东西(甚至是另一个应用程序),我是否要修改链接描述文件,创建一个新的,或者我将如何写入这个特定的地点?我还没有完全掌握这一点。

标签: embeddedmicrocontrollerloaderlinker-scriptsatmelstudio

解决方案


您的想法通常是正确的。链接描述文件只不过是一个具有其专门语言的文件,它传达有关内存的某些信息以及应如何使用它们,它决定了程序在内存中的布局。一些链接器也会通过命令行选项接受这样的内存规范。

关于您的具体问题,是的,您可以通过修改第二个的链接描述文件,特别是程序映像的起始地址来编写另一个占用不同内存地址(不同于第一个)的固件。当然,这并没有说明这两个固件将如何运行或通信。这些是单独的问题。您还需要知道 MCU 的闪存可擦除页面边界,以便您可以将第二张图像放置在不同的可擦除页面边界中。

在某些固件下载器/编程器中,您还可以指定与固件映像中指定的起始偏移量不同的起始偏移量。这与链接描述文件进程是分开的。这有几个用途。例如,您的固件可能构建为从 SRAM 运行,而不是直接从闪存运行。因此,在固件下载时,需要将其移动到闪存位置,并且在运行时,将使用某种机制将代码从闪存复制到程序实际运行的 SRAM。还有其他场景。


推荐阅读