Я программирую 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, кроме перепрошивки устройства, также инициализирует область ОЗУ.