我正在编程STM32L432KC,我希望将其置于待机模式,该模式可以保留SRAM2
内容。为此,我通过将SRAM1
与SRAM2
分开,在内存中创建了一个单独的部分。
在此芯片中,SRAM1
和SRAM2
可被视为连续的内存区域,因此最初的内存映射方式与链接描述文件中的映射相同:
MEMORY
{
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K
FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 256K
}
我将其更改为将SRAM1
和SRAM2
分开:
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区域。