不在数据部分中的已初始化数据在STM32中进行了初始化,因此不应

时间:2018-09-13 11:23:20

标签: c stm32 linker-scripts

我正在编程STM32L432KC,我希望将其置于待机模式,该模式可以保留SRAM2内容。为此,我通过将SRAM1SRAM2分开,在内存中创建了一个单独的部分。

在此芯片中,SRAM1SRAM2可被视为连续的内存区域,因此最初的内存映射方式与链接描述文件中的映射相同:

MEMORY
{
RAM (xrw)      : ORIGIN = 0x20000000, LENGTH = 64K
FLASH (rx)     : ORIGIN = 0x8000000, LENGTH = 256K
}

我将其更改为将SRAM1SRAM2分开:

MEMORY
{
RAM (xrw)      : ORIGIN = 0x20000000, LENGTH = 48K
FLASH (rx)     : ORIGIN = 0x8000000, LENGTH = 256K
SRAM2 (xrw)    : ORIGIN = 0x10000000, LENGTH = 16K
}

默认情况下,区域0x2000C000 - 0x20010000映射到0x10000000 - 0x10004000

然后我将一个节映射到链接描述文件中的新内存区域:

  .sram2 :
  {
    . = ALIGN(4);
    _ssram2 = .;
    *(.sram2)
    *(.sram2*)

    . = ALIGN(4);
    _esram2 = .;
  } > SRAM2

然后在新部分中放置一个初始化的全局变量:

static unsigned test_var __attribute__((section(".sram2")) = 10;

问题是我没有编辑启动代码以将已初始化的数据复制到SRAM2中,但是当我调试时,我可以看到该变量已被初始化,我认为不应该这样做。

问题是:为什么要初始化?

我想知道STLinkV2是否除了刷新设备之外还会初始化RAM区域。

0 个答案:

没有答案