微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 FLASH 更改 ELF 基址之前添加 NOLOAD 部分

如何解决在 FLASH 更改 ELF 基址之前添加 NOLOAD 部分

因此,我尝试在引导加载程序和位于其自己扇区的主代码间的地址处添加闪存的保留部分(我使用的是 STM32F4)。当我在代码中使用该部分时,elf 基地址发生变化并且我的调试器吓坏了,但是十六进制(显然)有效。在我的调试器中打开 elf 时,它会查找错误的基地址 0x8000000。由于 FLASH 位于 0x800C000(并且 isr_vector 加载在那里),调试器无法启动代码

那么,我的问题是,为什么添加此部分会导致精灵重新设定地址?我使用另一个代码库,这是由另一个人为 STM32F0 实现的(以相同的方式)并且没有这个问题。我认为 NOLOAD 标签应该告诉编译器不要加载那个 flash 部分,因此它不会影响 elf 程序头?

以下是我如何设置的示例:

代码

const myStruct var __attribute__((section(".rsv_flash"),used,aligned(4));

链接

MEMORY
{
FLASH (rx): ORIGIN=0x800C000 LENGTH= 2M - 32K - 16K
RSV_FLASH (r): ORIGIN=0x8008000 LENGTH= 64
}

SECTIONS {
/* There are other Sections in here */

.rsv_flash (NOLOAD) :
{
 __RSV_FLASH_START=.;
. = ALIGN(4);
KEEP(*(.rsv_flash))
. = ALIGN(4);
 __RSV_FLASH_END=.;
} >RSV_FLASH

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。