链接器脚本并更改flash地址



我想问以下一个问题:我使用stm32g0xx微控制器,我想自动更改链接器脚本中的flash地址,而不是每次我想生成一个应用程序图像以让它从不同的地址运行时强制手动更改。我写了一个应用程序,我把它写到了两个不同的地址0x08001000和0x08004800;有能力切换到其他应用程序,如果其中一个被更新或损坏。它工作得很好,但我需要通过每个图像来手动更改flash地址,我想问是否有可能在其他地方更改链接器脚本,如启动。

MEMORY
{
RAM    (xrw)    : ORIGIN = 0x20000000,   LENGTH = 8K
FLASH    (rx)    : ORIGIN = 0x8001000,   LENGTH = 32K 
}
MEMORY
{
RAM    (xrw)    : ORIGIN = 0x20000000,   LENGTH = 8K
FLASH    (rx)    : ORIGIN = 0x8004800,   LENGTH = 32K 
}

您可以创建两个链接器文件并编译两次,每次使用不同的链接器脚本和不同的输出二进制文件。您将获得两个必要的二进制文件。要将其集成到您的项目中,这取决于您的工作方式(STM IDE,独立的Makefile…),您没有提到。

作为旁注,您应该修改链接器脚本上的LENGTH,它将防止链接器将数据放置在您有另一个应用程序的地方。您的第一个应用程序以4KB (0x1000)开始,第二个以18KB (0x4800)开始,第一个应用程序的长度应该是18-4 = 16KB,第二个LENGTH应该是32-18 = 14KB(如果FLASH总大小为32KB)。

您可以编写两个不同的链接器脚本,并在您的建筑环境中应用其中一个(使用-T链接器标志),或者您可以为您的ORIGIN使用一个变量,并通过-Wl,——defsym==

最新更新