Инициализированные данные, которых нет в разделе данных, инициализируются в STM32 и не должны - PullRequest
0 голосов
/ 13 сентября 2018

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

...