Перейти к содержанию
    

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

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

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

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

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

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, pokk сказал:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, pokk said:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, pokk сказал:

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

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

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 minutes ago, HardEgor said:

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

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

22 minutes ago, AlexandrY said:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 минуту назад, pokk сказал:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, AlexandrY said:

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

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, xvr said:

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

 

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

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

16 минут назад, AlexandrY сказал:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

36 minutes ago, AlexandrY said:

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

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

37 minutes ago, AlexandrY said:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...