Я столкнулся со следующей проблемой. Я программирую микроконтроллер ARM cortex M4 и хотел бы, чтобы он имел значение по умолчанию для IP-адреса, сетевой маски, шлюза и т. д. Эти значения по умолчанию должны изменяться через последовательную связь, И эти изменения должны быть постоянными. Например: значение по умолчанию для IP-адреса и сетевой маски: 192.168.1.20 255.255.255.0 Пользователь изменяет адрес и сетевую маску на 192.168.2.10 255.255.255.0 Теперь после отключения и повторного подключения устройства к источнику питания значения «по умолчанию» должны быть введен пользователем (192.168.2.10/255.255.255.0)
Чтобы решить эту проблему, я подумал об использовании так называемой рабочей флэш-памяти моего УК. Это энергонезависимая память, которую можно записать с помощью специальных команд. Чего я пытаюсь добиться, так это определить значения по умолчанию в программном коде (как переменные в данный момент или, если это возможно, позже), которые выбираются компоновщиком и чье ЗНАЧЕНИЕ помещается в энергонезависимую память (рабочая флэш-память ) по адресу 0x200C000.
Прямо сейчас мой файл компоновщика выглядит так:
MEMORY
{
rom (rx) : ORIGIN = 0x00000000, LENGTH = 0x100000 /* 1MB */
ram (rwx) : ORIGIN = 0x1FFF0000, LENGTH = 0x10000 /* 64K */
ram1 (rwx) : ORIGIN = 0x20038000, LENGTH = 0x10000 /* 64K */
wofl (rwx) : ORIGIN = 0x200C0000, LENGTH = 0x8000 /* 32K */
}
...
.wifi_defaults :
{
KEEP(*(.wifi_defaults*));
} > wofl
...
и объявление переменной в исходном коде (просто для тестирования):
uint16_t __attribute__((section(".wifi_defaults"))) test= 0x00D0;
Файл .map показывает мне:
.wifi_defaults 0x200c0000 0x2
*(.wifi_defaults*)
.wifi_defaults
0x200c0000 0x2 ..\obj\HSFirmware.o
0x200c0000 test
Но при доступе к переменной я получаю не правильное значение, а только начальное значение 0xFFFF, которое было возвращено еще до того, как я начал возиться с компоновщиком.
Я также пытался использовать CONST перед объявлением переменной, но это не имело никакого значения.
Насколько я понимаю, мой код помещает неинициализированную переменную в указанный сегмент кода. Как я могу поместить инициализированную переменную по заданному адресу?