Я пытаюсь использовать пользовательский раздел ОЗУ, чтобы иметь возможность передавать информацию при перезагрузке. Этот раздел не будет удален при загрузке, и поэтому переменные, помещенные в этот раздел, будут сохраняться при перезагрузке (если, конечно, нет потери питания).
Я использую набор инструментов GNU и MCU Cortex-M0 (STM32)
Итак, я добавил в скрипт компоновщика новую область памяти перед ОЗУ:
RAM_PERSIST (xrw) : ORIGIN = 0x20000000, LENGTH = 0x0040
RAM (xrw) : ORIGIN = 0x20000040, LENGTH = 0x0FD0
Тогда раздел для входа:
.pds :
{
KEEP(*(.pds))
} >RAM_PERSIST
Наконец, в коде C я объявляю некоторые данные в этом разделе:
data_t __attribute((section(".pds")) data;
Я компилирую, но я не могу загрузить сгенерированный двоичный файл на свою цель. Используя objdump, я обнаружил, что моя прошивка получила новый раздел ".sec2", начинающийся с 0x20000000:
> (...)/arm-none-eabi-objdump -s ./obj/firmware.hex | tail
8006d20 f8bc08bc 9e467047 f8b5c046 f8bc08bc .....FpG...F....
8006d30 9e467047 e9000008 c1000008 00127a00 .FpG..........z.
8006d40 19000000 e0930400 409c0000 400d0300 ........@...@...
8006d50 c0c62d00 30750000 ffffffff 01000000 ..-.0u..........
8006d60 04000000 ....
Contents of section .sec2:
20000000 00000000 00000000 00000000 00000000 ................
20000010 00000000 00000000 00000000 00000000 ................
20000020 00000000 00000000 00000000 00000000 ................
20000030 00000000 00000000 00000000 00000000 ................
Так что я думаю, что должен сказать компоновщику, что этот раздел не во флэш-памяти, поэтому не должен быть частью прошивки.
Я прав? Если да, то как это сделать?
Заранее спасибо.