pokk 0 2 декабря, 2019 Опубликовано 2 декабря, 2019 · Жалоба Добрый день,в каждом моем устройте есть общий блок(структура) настроек и констант+ CRC всех настроек. Гипотетически, после настройки, калибровки и отправки устройства пользователю, решили сделать, доработку программы, в которой необходимо сохранять какие то значения в блок настроек, причем в середину блока (либо изменения формата(структру) одного из параметра входящего в блок настроек). Так вот как можно изменить программу у пользователя, с сохранением настроек/калибровки и внести новые данные ? Пока решение ввижу только одно, скачать блок настроек у пользователя, и посредством стороней программы сконвертировать, в новый блок, но такой вариант не сильно нравиться хотелось бы без сторонего ПО. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 17 2 декабря, 2019 Опубликовано 2 декабря, 2019 · Жалоба Сам недавно озадачивался аналогичной проблемой. Для этого заранее предусмотрел, чтобы в "блоке настроек" были заложены поля версии прошивки, железа и серийник изделия (необязательно). Это позволит заложить в саму прошивку правильную конвертацию старого формата настроек и нового. Главное - обязательные (mandatory) поля должны быть строго зафиксированы в одних и тех же местах: версии, серийник, размер и контрольная сумма, например, в самом начале блока. В этом случае никакой сторонний софт не нужен - всю конвертацию сможет сделать сама прошивка, но придется отлаживать на приборе с каждой версией, которую сможет обновить эта прошивка. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
pokk 0 2 декабря, 2019 Опубликовано 2 декабря, 2019 · Жалоба А сам алгоритм конвертации примерно такой? Записать новые параметры в отдельную область NewParam По изменению версии ПО вызвать свой обработчик в котором раписано: NewParam1.value=PrevParam1.value NewParam2.value=PrevParam2.value NewParam3.value=PrevParam3.value Записать NewParam на место PrevParam Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MegaVolt 25 2 декабря, 2019 Опубликовано 2 декабря, 2019 · Жалоба 1 час назад, pokk сказал: хотелось бы без сторонего ПО. Ну сконвертируйте внутренним ПО. В чём проблема? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 2 2 декабря, 2019 Опубликовано 2 декабря, 2019 · Жалоба 1 hour ago, pokk said: Пока решение ввижу только одно, скачать блок настроек у пользователя, и посредством стороней программы сконвертировать, в новый блок, но такой вариант не сильно нравиться хотелось бы без сторонего ПО. Для этого настройки храняться в виде сериализованных именованных структур в файлах. Лучше всего подходит JSON формат. Если в EEPROM мало места, то JSON сжимают. У всех настроек уникальные имена, в простейшем случае - номера. Но лучше иметь кроме имен еще и алиасы. Линейные файловые системы помещаются в EEPROM любого размера, кроме этого обеспечат wear leveling. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
HardEgor 62 2 декабря, 2019 Опубликовано 2 декабря, 2019 · Жалоба 1 час назад, pokk сказал: Так вот как можно изменить программу у пользователя, с сохранением настроек/калибровки и внести новые данные ? Пока решение ввижу только одно, скачать блок настроек у пользователя, и посредством стороней программы сконвертировать, в новый блок, но такой вариант не сильно нравиться хотелось бы без сторонего ПО. Вашу Flash можно стирать/писать постранично? Программа и настройки находятся на одной странице Flash? Если оба "да", то считать и переписать настройки на другую страницу, а свой новой программе предусмотреть, что настройки будут хранится там. Если только первый вопрос "да", то можно поверх старой программы записать бутлоадер который сохранит настройки в другу память(flash, ram) , запишет новую программу и вернёт настройки куда надо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
pokk 0 2 декабря, 2019 Опубликовано 2 декабря, 2019 · Жалоба 5 minutes ago, HardEgor said: Если оба да, то считать и переписать настройки на другую страницу, а свой новой программе предусмотреть, что настройки будут хранится там. Да проблема в том что старый блок программы надо "раздвинуть" и внутри что-то изменить, и это в лучшем случае. 22 minutes ago, AlexandrY said: Лучше всего подходит JSON формат О благодарю такой вариант мне больше нравиться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
HardEgor 62 2 декабря, 2019 Опубликовано 2 декабря, 2019 · Жалоба 1 минуту назад, pokk сказал: Да проблема в том что старый блок программы надо "раздвинуть" и внутри что-то изменить, и это в лучшем случае. Для таких манипуляций лучше сразу отделить настройки от программы, тогда проще будет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 2 декабря, 2019 Опубликовано 2 декабря, 2019 · Жалоба 1 hour ago, AlexandrY said: Лучше всего подходит JSON формат. Тогда уж лучше BSON - http://bsonspec.org/ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 182 2 декабря, 2019 Опубликовано 2 декабря, 2019 · Жалоба У меня хранение сделано структурой (простой, двоичной), наружу выдаётся в виде JSON, а внутри МК (при обработке) считанный снаружи JSON парсится в бинарный вид (видимо что-то типа BSON) и применяется к структуре (по таблице соответствия членов структуры элементам JSON/BSON). Если надо что-то добавить в структуру, или убрать или изменить формат чего-то: пишу конвертер из старого формата в новый, который читает структуру старого формата и затем записывает её в новом формате. В составе структуры есть номер версии формата. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 2 2 декабря, 2019 Опубликовано 2 декабря, 2019 · Жалоба 1 hour ago, xvr said: Тогда уж лучше BSON - http://bsonspec.org/ Лучше для чего? Для связи с MongoDB? Скажем мой файл настроек JSON размером в 44 Кб в BSON кодировке будет иметь размер 34 кБ, А после моего алгоритма сжатия тот же JSON имеет размер 5 кБ! Кстати, хранение настроек в именованных структурах в памяти избавляет от необходимости проверки версий и применения конвертеров. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 182 2 декабря, 2019 Опубликовано 2 декабря, 2019 · Жалоба 16 минут назад, AlexandrY сказал: Кстати, хранение настроек в именованных структурах в памяти избавляет от необходимости проверки версий и применения конвертеров. ....и добавляет геморроя с организацией этого массива структур, поиском, безопасной атомарной модификацией, копированием и т.п. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 2 декабря, 2019 Опубликовано 2 декабря, 2019 · Жалоба 36 minutes ago, AlexandrY said: Лучше для чего? Для хранения в бинарном виде. Не всегда на МК нужен полновесный парсер JSON'ов (и уж точно не для хранения внутренних настроек) 37 minutes ago, AlexandrY said: А после моего алгоритма сжатия тот же JSON имеет размер 5 кБ! Ну и BSON пожать можно Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
pokk 0 2 декабря, 2019 Опубликовано 2 декабря, 2019 · Жалоба AlexandrY, jcxz, какие библиотеки используете для JSON или что-то свое? А как дальше использование сохраненных настроек в формате JSON ? С кажем нужен коэффициент параметра который высчитывается каждую секунду. По включению/изменению конвертируем все настройки JSON в структуру в RAM и работаем через структуру? 3 hours ago, xvr said: Тогда уж лучше BSON - http://bsonspec.org/ Да видал уже его, но для web все равно использую JSON, по этому думаю на нём остановиться, что бы не тянуть лишнее библиотеки. 2 hours ago, jcxz said: считанный снаружи JSON парсится в бинарный вид (видимо что-то типа BSON) и применяется к структуре (по таблице соответствия членов структуры элементам JSON/BSON). А можно по подробнее, как это по таблице соответствий применяете ? Скажем: {"Param1":134,"Param2":134} На ключ param1 вызовется обработчик для param1 и установить его в структуру а для второго параметра другая соответствующая функция? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 2 2 декабря, 2019 Опубликовано 2 декабря, 2019 · Жалоба 54 minutes ago, pokk said: какие библиотеки используете для JSON или что-то свое? На ключ param1 вызовется обработчик для param1 и установить его в структуру а для второго параметра другая соответствующая функция? Использовал разные, но остановился на https://jansson.readthedocs.io/en/latest/apiref.html JSON используется у меня только для сериализации и десериализации. Сами параметры после десериализации из JSON хранятся в виде переменных в разных местах и модулях. Они могут быть как статические, так и динамические. Сериализатор имеет доступ к переменным через массив связывающий имена переменных и указатели на них. 2 hours ago, xvr said: Ну и BSON пожать можно Можно, но сжатие будет хуже. Эт как пытаться сжать текст после шифрования. Он просто не сожмется. С другой стороны применив просто другую схему кодирования в JSON (скажем массивы вместо именованных объектов) и без форматирования размер будет близок к BSON. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться