• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Как сохранить переменную во flash

tolyan23

New member
Непосредственно программирую ESP хочу сохранять переменную в энерго независимую память, как это правильно делать? (считать и записать) или можно как то сразу объявить что переменная храниться на флешке
 

pvvx

Активный участник сообщества
Написать свою функцию чтения и сохранения этой переменной в свободный сектор Flash. Для записи необходимо стереть сектор (4096 байт) и записать значение. А далее выдумываете алгоритм, как записывать чтобы не стирать сектор flash при каждом изменении вашей переменной, а дописывать измененную в новый ещё не записанный адрес. Аналогично функция чтения должна определять где последняя запись. Иначе протрете дырку в flash - кол-во стираний/записи одного адреса у неё ограничено...
 

tolyan23

New member
в sdk есть пример
uint32 value;
uint8 *addr = (uint8 *)&value;
spi_flash_read(0x3E * SPI_FLASH_SEC_SIZE, (uint32 *)addr, 4);
os_printf("0x3E sec:%02x%02x%02x%02x\r\n", addr[0], addr[1], addr[2],
addr[3]);
я думал может есть способы проще, например в CVAVR можно в объявлении переменной указать что то типа EEPROM char Data; и переменная Data будет хранится в EEPROM (хотя в даташите есть специальные функции чтения и записи в eeprom) ну раз тут так нельзя то ладно. Как узнать какой адрес я могу использовать а какой не? 00 могу использовать? Тоесть стереть можно только целый сектор?

И еще там есть 4 команды обновления прошивки, как это работает? Т.е. нужно куда то записать файл новой прошивки дать команду system_upgrade_start(параметры сервера) и он сам обновится?
 

pvvx

Активный участник сообщества
например в CVAVR можно в объявлении переменной указать что то типа EEPROM char Data; и переменная Data будет хранится в EEPROM (хотя в даташите есть специальные функции чтения и записи в eeprom) ну раз тут так нельзя то ладно.
Тоже можно. Необходимо описать специальный сегмент в ld файле для линковщика и задать атрибут в СИ.
Тоесть стереть можно только целый сектор?
в flash - да. Минимальный размер стирания 1 сектор, но можно стирать блоками в 64 килобайта, а можно и весь чип за раз.
И еще там есть 4 команды обновления прошивки, как это работает? Т.е. нужно куда то записать файл новой прошивки дать команду system_upgrade_start(параметры сервера) и он сам обновится?
Типа того, но это китайское и работает ужасно и сбоит.
 

tolyan23

New member
Типа того, но это китайское и работает ужасно и сбоит.
В чем ожидать проблем и как все таки обновить с помощью этой команды? Допустим обновятся будем с компа, ком подключен к той же wifi сети. Я так понимаю нужна какая то программа на компе чтобы она создала сервер и открыла доступ к файлу прошивки?
 
Последнее редактирование:
Сверху Снизу