Jump to content

    

Конвертация блока настроек/калибровки, устройства

Добрый день,в каждом моем устройте есть общий блок(структура) настроек и  констант+ CRC всех настроек.

Гипотетически, после настройки, калибровки и отправки  устройства пользователю,   решили сделать, доработку программы, в которой необходимо сохранять какие то значения в блок настроек, причем в середину блока (либо изменения формата(структру) одного из параметра входящего в блок настроек).

Так вот как можно изменить программу у пользователя, с сохранением настроек/калибровки и внести новые данные ?

Пока решение ввижу только одно, скачать блок настроек у пользователя, и посредством стороней программы сконвертировать, в новый блок, но такой вариант не сильно нравиться хотелось бы без сторонего ПО.  

 

 

 

Share this post


Link to post
Share on other sites

Сам недавно озадачивался аналогичной проблемой.

Для этого заранее предусмотрел, чтобы в "блоке настроек" были заложены поля версии прошивки, железа и серийник изделия (необязательно).

Это позволит заложить в саму прошивку правильную конвертацию старого формата настроек и нового.

Главное - обязательные (mandatory) поля должны быть строго зафиксированы в одних и тех же местах: версии, серийник, размер и контрольная сумма, например, в самом начале блока.

В этом случае никакой сторонний софт не нужен - всю конвертацию сможет сделать сама прошивка, но придется отлаживать на приборе с каждой версией, которую сможет обновить эта прошивка.

Share this post


Link to post
Share on other sites

А сам алгоритм конвертации примерно такой?

  1. Записать новые параметры в отдельную область  NewParam
  2. По изменению версии ПО вызвать свой обработчик в котором раписано:
  3. NewParam1.value=PrevParam1.value
  4. NewParam2.value=PrevParam2.value
  5. NewParam3.value=PrevParam3.value
  6. Записать NewParam на место PrevParam

 

 

 

Share this post


Link to post
Share on other sites
1 час назад, pokk сказал:

хотелось бы без сторонего ПО.  

Ну сконвертируйте внутренним ПО. В чём проблема?

Share this post


Link to post
Share on other sites
1 hour ago, pokk said:

Пока решение ввижу только одно, скачать блок настроек у пользователя, и посредством стороней программы сконвертировать, в новый блок, но такой вариант не сильно нравиться хотелось бы без сторонего ПО.  

Для этого настройки храняться в виде сериализованных именованных структур в файлах. 
Лучше всего подходит JSON формат. Если в EEPROM мало места, то JSON сжимают.  
У всех настроек уникальные имена, в простейшем случае - номера. Но лучше иметь кроме имен еще и алиасы. 
Линейные файловые системы помещаются в EEPROM любого размера, кроме этого обеспечат wear leveling.

Share this post


Link to post
Share on other sites
1 час назад, pokk сказал:

Так вот как можно изменить программу у пользователя, с сохранением настроек/калибровки и внести новые данные ?

Пока решение ввижу только одно, скачать блок настроек у пользователя, и посредством стороней программы сконвертировать, в новый блок, но такой вариант не сильно нравиться хотелось бы без сторонего ПО. 

Вашу Flash можно стирать/писать постранично?

Программа и настройки находятся на одной странице  Flash?

Если оба "да", то считать и переписать настройки на другую страницу, а свой новой программе предусмотреть, что настройки будут хранится там.

Если только первый вопрос "да", то можно поверх старой программы записать бутлоадер который сохранит настройки в другу память(flash, ram) , запишет новую программу и вернёт настройки куда надо.

Share this post


Link to post
Share on other sites
5 minutes ago, HardEgor said:

Если оба да, то считать и переписать настройки на другую страницу, а свой новой программе предусмотреть, что настройки будут хранится там.

Да проблема в том что старый блок программы надо "раздвинуть" и внутри что-то изменить, и это в лучшем случае.

22 minutes ago, AlexandrY said:

Лучше всего подходит JSON формат

О благодарю такой вариант мне больше нравиться.

Share this post


Link to post
Share on other sites
1 минуту назад, pokk сказал:

Да проблема в том что старый блок программы надо "раздвинуть" и внутри что-то изменить, и это в лучшем случае.

Для таких манипуляций лучше сразу отделить настройки от программы, тогда проще будет.

Share this post


Link to post
Share on other sites
1 hour ago, AlexandrY said:

Лучше всего подходит JSON формат.

Тогда уж лучше BSON - http://bsonspec.org/

 

Share this post


Link to post
Share on other sites

У меня хранение сделано структурой (простой, двоичной), наружу выдаётся в виде JSON, а внутри МК (при обработке) считанный снаружи JSON парсится в бинарный вид (видимо что-то типа BSON) и применяется к структуре (по таблице соответствия членов структуры элементам JSON/BSON).

Если надо что-то добавить в структуру, или убрать или изменить формат чего-то: пишу конвертер из старого формата в новый, который читает структуру старого формата и затем записывает её в новом формате. В составе структуры есть номер версии формата.

Share this post


Link to post
Share on other sites
1 hour ago, xvr said:

Тогда уж лучше BSON - http://bsonspec.org/

 

Лучше для чего? Для связи с MongoDB?  
Скажем мой файл настроек JSON размером в 44 Кб в BSON кодировке будет иметь размер  34 кБ,
А после моего алгоритма сжатия тот же JSON имеет размер 5 кБ!

Кстати, хранение настроек в именованных структурах в памяти избавляет от необходимости проверки версий и применения конвертеров. 

 

Share this post


Link to post
Share on other sites
16 минут назад, AlexandrY сказал:

Кстати, хранение настроек в именованных структурах в памяти избавляет от необходимости проверки версий и применения конвертеров. 

....и добавляет геморроя с организацией этого массива структур, поиском, безопасной атомарной модификацией, копированием и т.п.

Share this post


Link to post
Share on other sites
36 minutes ago, AlexandrY said:

Лучше для чего?

Для хранения в бинарном виде. Не всегда на МК нужен полновесный парсер JSON'ов (и уж точно не для хранения внутренних настроек)

37 minutes ago, AlexandrY said:

А после моего алгоритма сжатия тот же JSON имеет размер 5 кБ!

Ну и BSON пожать можно

Share this post


Link to post
Share on other sites

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  и установить его в структуру а для второго параметра другая соответствующая функция?

 

 

Share this post


Link to post
Share on other sites
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. 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now