реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Сохранение параметров в файл, С использованием библиотеки fat fs
Ivan Kuznetzov
сообщение May 28 2013, 16:11
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 307
Регистрация: 6-02-08
Из: Россия, Екатеринбург
Пользователь №: 34 798



Добрый день! Работаю на МК с fat fs. Подскажите пожалуйста как грамотнее и красивее организовать хранение параметров в файле, затем самим контроллером парсить и модифицировать отдельные значения в таком файле?


--------------------
Разработчик
Go to the top of the page
 
+Quote Post
Ruslan1
сообщение May 29 2013, 08:54
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



Цитата(Ivan Kuznetzov @ May 28 2013, 19:11) *
Добрый день! Работаю на МК с fat fs. Подскажите пожалуйста как грамотнее и красивее организовать хранение параметров в файле, затем самим контроллером парсить и модифицировать отдельные значения в таком файле?

сделать структуру, которую целиком сохранять как отдельный бинарный файл. Для модификации читаете файл в структуру в ОЗУ, модифицируете отдельное поле структуры, сохраняете файл. Это самый легкий и быстрый путь если структуры небольшие и есть достаточно ОЗУ (для скорости доступа еще хорошо если длина файла не более одного кластера).
Можно конечно и по сдвигу работать с тем же файлом: читать-модифицировать только нужное поле (известное количество байт, начиная с известного сдвига от начала файла).

Но на самом деле вариантов много, и все зависит от текущей ситуации и от того какая оптимизация важна (по ОЗУ, по длине кода, по скорости выполнения, по длительности доступа к носителю....)
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение May 29 2013, 16:08
Сообщение #3


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Имхо, гораздо удобнее иметь текстовый конфиг:
  • Человекочитаем (можно достать карточку и глянуть, что там);
  • Можно отредактировать на ПК;
  • Можно спокойно добавлять параметры, и файл по прежнему прочитается;
  • Это круче, наконец! sm.gif



--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
aaarrr
сообщение May 29 2013, 16:15
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(AHTOXA @ May 29 2013, 20:08) *
Имхо, гораздо удобнее иметь текстовый конфиг:

Несомненно. Единственный минус - процедура модификации получается достаточно громоздкой.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение May 29 2013, 17:45
Сообщение #5


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Модификации - в смысле считал/изменил/сохранил? Или имеется в виду добавление нового параметра в прошивке?


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
aaarrr
сообщение May 29 2013, 18:36
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(AHTOXA @ May 29 2013, 21:45) *
Модификации - в смысле считал/изменил/сохранил?

Да.
Go to the top of the page
 
+Quote Post
Ruslan1
сообщение May 29 2013, 20:48
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



Хотя сама ситуация очень нетривиальная- правка файлов контроллером.
Если это конфиг: он правится на компьютере
Если это собираемые данные: они не правятся а дописываются или файл утилизируется целиком.

А если просто читать- то я тоже посоветую текстовый. сильно меньше головной боли при изменении структуры и наполненности файла и сильно дружественней.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 30 2013, 06:00
Сообщение #8


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (aaarrr @ May 29 2013, 19:15) *
Единственный минус - процедура модификации получается достаточно громоздкой.
Вот довольно небольшая реализация


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение May 30 2013, 06:12
Сообщение #9


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(Ivan Kuznetzov @ May 28 2013, 19:11) *
Добрый день! Работаю на МК с fat fs. Подскажите пожалуйста как грамотнее и красивее организовать хранение параметров в файле, затем самим контроллером парсить и модифицировать отдельные значения в таком файле?


Зависит от сценария использования параметров.

Раньше использовал очень простой подход.
Объявлял все параметры как члены одной структуры. И сохранял эту структуру одной командой fwrite в файл.
Первоначально файл создавался в файловой системе самой программой при первом запуске со значениями по умолчанию.
Далее параметры правились через какой-нить интерфейс пользователя в дивайсе.

Сложнее приходилось когда надо было этот файл заранее создать в FS, чтобы избавить пользователя от ручного ввода.
Тогда писалась программа на PC.

Этот метод и поныне благополучно используется в промышленных дивайсах.
Например в частотных преобразователях OMRON которые славятся своей универсальностью и в которых параметров более трех сотен используется такой примитивный метод.
Все параметры они умудрились представить одно или двух байтными числами каждое со своим масштабированием. Никаких проблем с типизацией. Адаптировано для правки на 4-х позиционном 7-и сегментном индикаторе. Удобно при работе через протокол MODBUS. Для компа имеют свою специализированную программу.
Но это настоящий кошмар для наладчиков.
Каждый год с выходом новой версии прошивки частотника старые файлы параметров перестают подходить к новой партии частотников. И надо опять искать того гуру который конфигурировал параметры чтобы их заново адаптировать.

Потом я перешел на текстовые файлы в стиле .INI где параметры хранились в виде пар [имя]=[значение]
Информация о типах переменных по прежнему хранилась жестко в программе.
Но в .INI файлы можно добавлять коментарии. Это сильно упростило передачу таких фалов в управление в чужие руки.
Поначалу был примитивный парсер .INI файлов и юзеры из под копьютеров с разными операционками умудрялись туда внедрять невидимые служебные символы от которых парсер сбивался. Появилась необходимость делать валидатор .INI файлов с неясной доморощенной спецификацией.

И тогда я перешел на формат JSON.
Он прежде всего интересен своей точной спецификацией. Его можно проверить в куче онлайн валидаторов. Т.е. гарантируется абсолютная синтаксическая чистота.
В JSON параметры хранятся также в формате [имя]=[значение], но при этом еще и в виде иерархических структур.
Тип параметров можно описать в самом файле JSON. Очень удобно для передачи строковых параметров. Поддержка UTF8, т.е. строки могут быть на любом языке.
Наличие у каждого параметра имени сильно упрощает обращение к ним из скриптов или при создании HTML страниц редакторов параметров.
Обратная генерация JSON файлов правда несколько сложновата, поскольку для embedded дивайсов я не нашел исходников такой фичи.
Это связанно с тем, что нет единого стандарта на представление JSON структуры в памяти контроллера.
Я пока остановился на древовидных структурах в динамической памяти реализованных на списках.
Генерацию реализовал, но без сохранения форматирования, а без форматирования JSON становиться нечитабельным. sad.gif


Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение May 30 2013, 06:57
Сообщение #10


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(AlexandrY @ May 30 2013, 10:12) *
Спасибо за наводку на JSON!
Куда читабельнее xml'я!


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение May 30 2013, 08:41
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Сергей Борщ @ May 30 2013, 10:00) *
Вот довольно небольшая реализация

Размер архива напугал. Оказывается, там pdf sm.gif

Вообще, минимальная реализация пишется и отлаживается за пару часов. Под громоздкостью я имел в виду саму последовательность: создали временный файл - скопировали данные с модификацией - удалили основной файл - переименовали временный. А ее не обойти никак.
Go to the top of the page
 
+Quote Post
Ivan Kuznetzov
сообщение May 31 2013, 11:43
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 307
Регистрация: 6-02-08
Из: Россия, Екатеринбург
Пользователь №: 34 798



Спасибо за minini. Цель данной задачи - реализовать "закладки" в mp3 книгах, т.е. они будут прописаны в ini файле на самой SD карте. В догонку сразу второй вопрос: в проекте есть также настройки (структура приведена ниже) , которые должны сохраняться во внутренней флеш-памяти STM32. Как это лучше сделать?
Код
typedef union {        
struct
{
USHORT fm_freq[NUMBER_OF_FMSTATIONS];  //4B*20 = 80
UCHAR voxstatus;    //1B
UCHAR ee_runs;      //1B
UCHAR volume;       //1B
} space;
UCHAR raw[EEPROM_SIZE];
} EEPR;


--------------------
Разработчик
Go to the top of the page
 
+Quote Post
aaarrr
сообщение May 31 2013, 11:47
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Ivan Kuznetzov @ May 31 2013, 15:43) *
В догонку сразу второй вопрос: в проекте есть также настройки (структура приведена ниже) , которые должны сохраняться во внутренней флеш-памяти STM32. Как это лучше сделать?

А вот это явно просится в бинарный файл. Если, конечно, структура не будет меняться в каждой новой версии ПО.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 09:31
Рейтинг@Mail.ru


Страница сгенерированна за 0.01465 секунд с 7
ELECTRONIX ©2004-2016