Стратегия - это хорошо, но в вашем случае я не пойму, что вы подразумеваете под этим словом. Стратегия, как не сесть в лужу и не переделывать всё с начала? Стратегия, как это продвигать потом, чтобы людям зашло? Или что-то более абстрактное?
Объект не связывается с копией в eeprom. Это важно. Мы на старте пробежались по всем секторам, определили последние валидные данные, загрузили их в оперативку и всё. У нас есть данные в структуре, в оперативке, как будто мы вообще не с флеш работаем. Мы их там можем менять без конца и только когда захотим, чтобы оно сохранилось до след перезапуска - commit()
Представьте, что у вас есть потребность хранить 16 байт данных так, чтобы при перезапуске они у вас не стирались. Вот вы как будто подключили к своей arduino чип fram/eeprom ровно на 16 байт. Причем вы можете организовать как побайтовый доступ, так и разбить это всё на поля структуры и иметь доступ к именованным переменным.
Посмотрите пример из первого поста - он как раз про это. Вы просто пишете в этот объект и читаете оттуда. Но перед использованием его нужно инициализировать - begin()
, а чтобы данные прям сохранились навсегда, нужно их commit()
Ну говоря о стратегии eeprom надо начинать с понятия холодного старта(из коробки) и горячего старта. Вот пользователь достал из коробки и включил. Это холодный старт. Изменил настройки. Это горячий старт. Теперь при повторном включении устройство будет стартовать с такими настройками. Но что такое заводские/пользовательские настройки с точки зрения программы? Правильно. Это глобальные переменные которые были загружены из ееprom. Вот заводские/пользовательские настройки в программе могут быть россыпью, а могут быть объедены в единый объект. И тогда программист сразу понимает. Вот эта глобальная переменная -настройка, а это просто глобальная переменная. И что бы не думать по какому адресу писать в eepom, то лучше объединить в кучу присвоить единый адрес.
Так и сделано! Вы прям описали, как EEBoom работает.
Это принцип - всё загнано в структуру и эта структура - это наш “eeprom”. К этой структуре нет доступа извне, кроме как через поле data созданного объекта. Опять же отсылаю к примеру в первом посте.
Не совсем понял про дилемму с горячим и холодным стартом и что значит пользователь изменил настройки… Мне кажется речь идет не про параметры begin()
- выбор секторов, где будет базироваться “eeprom”.
Если речь идет о настройках, типа максимальной температуры или пароля вайфай, которые сохранены в eeprom (буду писать без кавыче дальше), то это не глобальные переменные. Это поля структуры вашей, которые доступны через точку - eeprom.data.maxTemp
.
Если объект eeprom
доступен глобально в программе - то и к полям вы везде к нему можете обратиться. Ну и если нужно перенести что-то в другие переменные - max_temp = eeprom.data.maxTemp
. Но проще и удобнее будет использовать именно поля структуры EEBoom, специально для этого предназначенные.
ну хорошо, можете объяснить, цифры выдуманные, выделил я N секторов для эмуляции, допустим они 10% флеша занимают, а потом код разросся до 95% флеша, что в этом случае будет?
Код ведь не поросенок - он сам не разрастается. Если объем кода вырос, значит вы изменили прошивку. Если при этом у вас пересекаются области флеша с прошивкой и область флеша с EEBoom - значит вы допустили ошибку.
Так бывает. И стек на кучу залезает - и много еще чего.
Но учитывая объем флеша в esp, думаю, что этот пример притянут за уши. Вот в stm32f030f4 - там прям да, всё серьезно - но и то пару секторов всегда можно занять.
И еще пару моментов.
В esp8266 - есть специально выделенная страница - 1019 (4мб), она именно для еепром. Она не затирается ни при ОТА, ни при использовании FS. Можете использовать ее одну (но зачем такие меры?)
В esp32 там вообще партишены - и программа никогда не “разрастется” на какой нибудь spiffs или ota partition.
Записи
max_temp = eeprom.data.maxTemp, eeprom.data.maxTemp=max_temp
ничего не говорят. Как программист запрограммирует так и будет. Например
max_temp = eeprom.data.maxTemp, это ОЗУ переменой ← ОЗУ из переменой объекта
eeprom.data.maxTemp=max_temp это ОЗУ в переменную объекта ← ОЗУ переменой
А move(max_temp , eeprom.data.maxTemp); move(eeprom.data.maxTemp,max_temp ) 'это уже из ОЗУ во флеш или обратно.
С вами очень тяжело говорить. Я без наезда. Просто реально не понимаю, о чем вы. Что значит этот последний пост. Вы против или вы соглашаетесь с чем-то, вы спрашиваете, или утверждаете…
С чем соглашаюсь, и что я спрашиваю. Я просто говорю что язык Си/Си++ с большими возможностями. Просто использования оператора = ничего не говорит о реальзации этой функции. Реализация будет разная потому что это такой язык.
Не обращай внимания, это Пух, его всегда было сложно понять даже нам, бывалым. А ты пока даже не пытайся
несомненно.
гениально! и что делать в этом гипотетическом случае, откатится на идею хранения пару байт в области куда прошивка долезет в последнюю очередь, или где стек не наползет.
я без наездов, просто примеров таких “библиотек” куча, тем более в среде, где вы пытаетесь, как сами сказали, пропиариться.
вот IRemote конфликтует часто с другими, пытающимися использовать ее “ресурсы”, и сколько тут криков - не работает!
пример из своей практики, был девайс, нужно было учитывать время работы, да был с внешней EEprom, выделил там 64 байта и давай писать по кругу с интервалом 1 час, говорят не годится, хотим до минут, я говорю даю гарантию на пол года (не казни за цифры, не помню я …)
- не не пойдет…
- любой каприз за ваши бабки
- ок
поставил, пин то пин фрам, даже не помню менял че в коде нет, все!
все довольны!
сколько бы я времени потратил, имея твое решение, и сколько денег бы заработал?
в глазах заказчика не трогая прибор, ты ничего не сделал. это так шутка)
ладно все, Деда пришел, огреет меня ща кочергой…
Нет.
Вы главный посыл так и не озвучили. Насколько я понял, он такое - исходя из всего описанного, на ваш взгляд, EEBoom лучше не пользоваться. Всё правильно?
На авто лучше не передвигаться - можно убиться об стену.
Вилка с утра за завтраком - это же глаз долой…
Ложка - тоже тот еще инструмент…
Мне кажется вы либо просто очень сильно хотите тут насолить, не смотря даже на мнение о себе окружающих, либо не сильно разбираетесь в практическом программировании, а больше теоретизируете… Это мои догадки - обе, конечно, могут быть неверны.
почему не выделить больше? А если заказчик захочет чаще, например с интервалом в 1 минуту - а, стоп, так и произошло
хорошая шутка, конечно…
В итоге что? Одобряете наше начинание, или расходиться нам?
Одобряю, тока можно пользоваться не буду?
Добро. Если надо заказчика разуть - fram ему на 512к - чтобы не расслаблялся. Это шутка.
А дома, пока никто не видит, вечерком, можно и EEBoom побаловаться, так сказать - уж больно просто там всё сделано и паять ничего не надо…
Ааааа, дак у тебя просто мания величия
Дык не у меня - просто продукт роскошен
Шучу конечно. Всё к месту хорошо. Естественно это не панацея и нужно здраво оценивать возможности внутреннего flash. Я просто постарался расширить окно этих возможностей для людей, кто никогда бы не сел за написание своего велосипеда.
Получилось даже лучше, чем я изначально задумывал. Это действительно удобно иметь 2-3 объекта с разными размерами и частотой обновления, которые сами там считаются, восстанавливаются…
Тем, кто сомневается, нужно просто попробовать. Я подозреваю, что все местные скептики рассуждают, так сказать, снаружи. Не читали, но осуждаем. Вы попробуйте - это ж кайф.
С 4мб flash у esp можно львиную долю задач закрыть.
Вот у меня приборчик ездит по стране - за 8 лет уже около 2 тыс устройств. У дальнобоев трудится. Там под хранение настроек - пределы температур, режим работы, яркость экрана и такое - отведено всего 2 страницы по 1кб.
Прогнозируемый срок отказа флеша - никогда. Потому что эти настройки меняются очень редко - не чаще раза в день, думаю, а вообще может и никогда у отдельных персон. Но хранить их где-то надо. Ставить внешнюю eeprom? Оно мне надо - на складе дома держать еще несколько позиций, паять это дополнительно в каждой партии? И с программной точки зрения - тоже не бесплатно. Надо какой-то интерфейс доступа к микросхеме организовать… И писать в одно место - снова не будешь - вроде как и пролезаешь, а вроде и некрасиво… Ну да - поставим fram…
Кстати еще момент - там их в одном девайсе 2 платы - общаются между собой - каждой надо по еепромине) А на одной плате - места нету под неё… Делать больше плату - нет, спасибо.
Надеюсь я достаточно красочно описал пути, которые могут привести к необходимости эмуляции eeprom…
я молчал, изображая умного, но тут не могу)
Вы не сильно дохера хотите от продукта, созданного под экосистему разработки, которая, в свою очередь, создана для снижения порога вхождения в разработку аппаратных средств? Для “простого ардуино пользователя”, как вы выразились, абсолютно неважно, как там метод назван (он все равно скопирует кусок из гитхаба и будет модифицировать на месте, добиваясь рабочего состояния, вот и разберется), это во-первых. Во-вторых, почти все либы для ардуино начинаются с этого begin(), че вы докопались?
Стратегия вам нужна? Мб, ГОСТы приплетем, вы в курсе, что есть ГОСТы на разработку ПО со времен СССР, там методология, и все остальное нормировано, поцчему вы не упоминаете про ГОСТы?
Короче говоря, отстаньте от парня со своими когнитивными искажениями. Насчет того как память работает, с кондерами и проволочками - многое спорно.
ты пытаешься убедить в этом людей, которые не пользуются чужими библиотеками, предпочитая написать своё, как им надо. В данном случае твоя хрень мало мальски здешним старожилом пишется за полчаса вместе с отладкой.
Ребяты, ну я ж просил не доводите его, реально вам/нам это не надо, ну дак не мы одни сюда заходим, зачем его троллить-то попусту? Написал - молодец, вдруг кому(кроме нас) да и пригадицца.
У вас тут серьезные ребята похоже.
В том и дело, что не пытаюсь. Но он зашел сюда и написал, что библиотека полная херь, и ещё десять таких же зашли и натоптали. Теперь человек с улицы (с гугла) придет, посмотрит первые 10 постов от людей, которые не то чтобы не протестировали, а даже не сходили посмотреть на гитхаб, что там и как. И какие человек сделает выводы?
Вот поэтому отбиваюсь.
Отвечай только на конкретные вопросы по использованию, на вопросы “Нахрена это нужно?” не ведись, игнорируй, и щастье обязательно наступит.