arm none eabi全局初始化变量值不正确

arm none eabi全局初始化变量值不正确,arm,stm32,bare-metal,linker-scripts,gnu-arm,Arm,Stm32,Bare Metal,Linker Scripts,Gnu Arm,我试着为stm32f334的led闪烁做一些示例。当我想通过使用初始化的全局变量来约束using.data节时,链接器出现了问题。全局变量的值不正确 这是我的代码: startup.s: B.c: 生成文件: 在.列表中,我看到了正确的值和地址: Disassembly of section .data: 20000000 <wymuszenie_data>: 20000000: 48000400 stmdami r0, {sl} Disassembly of sect

我试着为stm32f334的led闪烁做一些示例。当我想通过使用初始化的全局变量来约束using.data节时,链接器出现了问题。全局变量的值不正确

这是我的代码:

startup.s:

B.c:

生成文件:

在.列表中,我看到了正确的值和地址:

Disassembly of section .data:

20000000 <wymuszenie_data>:
20000000:   48000400    stmdami r0, {sl}

Disassembly of section .bss:

20000004 <__bss_start__>:
20000004:   00000000    andeq   r0, r0, r0
但在调试代码时,变量wymuszenie_数据的值已损坏0x2e006816

我真的不知道为什么会有不正确的全局变量值

致以最良好的祝愿, Marcin

这行

} > SRAM AT > flash
告诉链接器前一个块中的部分应该链接起来,就像它们放在RAM中一样,但实际上放在闪存中的不同地址。代码在RAM中查找数据,但它还不存在。在调用main之前,您应该安排将其复制。由于它是一个裸机嵌入式平台,因此没有操作系统加载程序来执行此任务

首先,使用链接器脚本中的目标地址创建一个符号

__data_destination__ = LOADADDR(.data);
然后在调用main之前,将&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

您还应该清除.bss,即用零填充它以避免下一次意外

如果要链接C库,可以使用memcpy和memset,否则必须用C或汇编编写自己的代码。

这一行

} > SRAM AT > flash
告诉链接器前一个块中的部分应该链接起来,就像它们放在RAM中一样,但实际上放在闪存中的不同地址。代码在RAM中查找数据,但它还不存在。在调用main之前,您应该安排将其复制。由于它是一个裸机嵌入式平台,因此没有操作系统加载程序来执行此任务

首先,使用链接器脚本中的目标地址创建一个符号

__data_destination__ = LOADADDR(.data);
然后在调用main之前,将&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

您还应该清除.bss,即用零填充它以避免下一次意外


如果要链接C库,可以使用memcpy和memset,否则必须用C或汇编编写自己的代码。

我在启动代码中没有看到任何将.data部分的内容复制到RAM的内容。我在启动代码中没有看到任何将.data部分的内容复制到RAM的内容。谢谢,这是个问题。我写的代码是零。bss和移动。数据从闪存到ram,一切都很好。谢谢,这是一个问题。我已经编写了代码,可以将数据从闪存归零、bss和移动到ram,并且一切正常。
} > SRAM AT > flash
__data_destination__ = LOADADDR(.data);