Автор Тема: Своя мини файловая система  (Прочитано 13660 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Andy

  • Администратор Форумa
  • Эксперт
  • *
  • Сообщений: 1803
  • Карма: 15
  • Пол: Мужской
  • Нельзя отремонтировать то, что не сломано...
    • minilabmaster
    • Просмотр профиля
    • Форум "Минилаб-Мастер"
В моем проекте используется хранение данных в i2c eeprom. Данных довольно много, и все они в разного размера кусочках - от 2 до 32 байт. Пока изучал контроллеры данные размещал тупо в памяти с новой 16 байтной стороки - удобно ориентироватся в бинарном редакторе. На одну цепочку команд выделял 16 байт, если она короче пустоту забивал ff. В цикле считывал байты, начиная с адреса команды, цикл от 1 до 16 или пока принятый байт не равен ff. 
В самом контроллере были адреса начала всех команд, для каждой кассы,  данные по каждой кассе были блоками по 256 байт на кассу - типа и далее "Папки".
Адрес начала каждой папки определялся смежением, относительно которого вычеслялся адрес каждого набора байтов-комманд - типа и далее "файлов".

Но эта организация пипец мне как не нравится, хотя и работает. Во первых - длина файлов может превышать 16  байт, и команды надо удлиннять, но они могут налазит на другие команды, мучительно перебивать адреса и тд
Во вторых - некрасивые лишние цепочки ff, остающиеся после коротких команд.

Все это привело к мысли хранить данные в памяти последовательно, без зазоров, разлеленные маркерами. И вот главный вопрос - как это лучше организовать?
Заклинило деталь - надави на нее, если она сломалась - ничего, ее все равно надо было менять.

Andy

  • Администратор Форумa
  • Эксперт
  • *
  • Сообщений: 1803
  • Карма: 15
  • Пол: Мужской
  • Нельзя отремонтировать то, что не сломано...
    • minilabmaster
    • Просмотр профиля
    • Форум "Минилаб-Мастер"
Re: Своя мини файловая система
« Ответ #1 : 16 Февраля 2011, 07:32:47 »
Файловая система должна удовлетворять таким требованиям:
- легко редактироватся в бинарном редакторе с подсведкой аски буковок, например в WinWi
- запись в неё из контроллера не поддерживается
- быть построеной на очень простых алгоритмах.
- сотоять из блоков - папок, внутри которого будут блоки - файлы. имена файлов и папок - цифры.

Как я пока себе это представляю. файлы будут начинатся с какого-нибудь необычного символа, например ¤ после которого будет имя файла либо в бинароном виде либо в формате аски. после этого идет собственно сами бинарные команды. концом файла будет следующий символ ¤ следующего файла. последний файл должен обязательно заканчиватся на ¤.

Как считывается файл -Задаем имя файла, Контроллер в цикле пробегается по всей папке, размер ее не велик - максимум 1 кб, ища код символа ¤ - A4 . Найдя его он считывает идущее после него имя и сравнивает с искомым. Если оно не совпадает - идем далее по циклу. Найдя нужное имя -считываем с него последовательно байты, пока не уткнемся в следующий символ ¤.

Вопрос по папкам - стоит ли их делать одинаковой длины (быстрый поиск) или проще делать их кратными 16 выравнивание в редакторе? 

Вот такие мысли. Есть еще какие идеи?
Заклинило деталь - надави на нее, если она сломалась - ничего, ее все равно надо было менять.

pumpkin

  • Модератор Раздела
  • Профи
  • *
  • Сообщений: 240
  • Карма: 2
  • Пол: Мужской
  • Это Я :-)
    • Просмотр профиля
Re: Своя мини файловая система
« Ответ #2 : 16 Февраля 2011, 19:11:11 »
1. "Файловая система" - read-only для контроллера? То есть в девайсе она только читаться будет, а подготавливаться будет на компе?
2. Так ли нужны папки? Или можно плоскую ФС?
3. Обязательны ли имена файлов? Или это могут быть числовые идентификаторы?

Andy

  • Администратор Форумa
  • Эксперт
  • *
  • Сообщений: 1803
  • Карма: 15
  • Пол: Мужской
  • Нельзя отремонтировать то, что не сломано...
    • minilabmaster
    • Просмотр профиля
    • Форум "Минилаб-Мастер"
Re: Своя мини файловая система
« Ответ #3 : 17 Февраля 2011, 02:16:35 »
1. Писать, конечно контроллером в епиромку можно. Для этого уже есть готовые функции.
2. По сути нужен двумерный массив -сейчас у меня для каждой кассы выделен свой блок памяти, в котором прописан заголовок, несколько констант фиксированой длины и несколmrко команд переменной длины, всего пока 10 "файлов" в каждой кассе. Переменной долины - это значит, что от кассы к кассе длина команд разная, а не то, что они меняются в процессе работы. 
3. конечно, это могут быть числовые индетификаторы, главное чтобы они читались в бинарном редакторе.


Заклинило деталь - надави на нее, если она сломалась - ничего, ее все равно надо было менять.

Andy

  • Администратор Форумa
  • Эксперт
  • *
  • Сообщений: 1803
  • Карма: 15
  • Пол: Мужской
  • Нельзя отремонтировать то, что не сломано...
    • minilabmaster
    • Просмотр профиля
    • Форум "Минилаб-Мастер"
Re: Своя мини файловая система
« Ответ #4 : 17 Февраля 2011, 02:28:10 »
Чтобы не быть голословным - текущее положение дел. Кусок рабочего бинарника 2 кассы.
Заклинило деталь - надави на нее, если она сломалась - ничего, ее все равно надо было менять.

Форум проекта "Минилаб-Мастер"

Re: Своя мини файловая система
« Ответ #4 : 17 Февраля 2011, 02:28:10 »

pumpkin

  • Модератор Раздела
  • Профи
  • *
  • Сообщений: 240
  • Карма: 2
  • Пол: Мужской
  • Это Я :-)
    • Просмотр профиля
Re: Своя мини файловая система
« Ответ #5 : 17 Февраля 2011, 05:29:43 »
По первому пункту - я имел в виду не "можно", а "нужно ли"?. Т.е. будет ли девайс в процессе работы изменять содержимое "файлов" и "папок"? Если нет - тогда проще гораздо, это не ФС, а просто некий формат хранения исходных даных.

2. Насколько я понял, это набор блоков данных (кассы), каждый из которых содержит некоторое количество "строк". И все они могут разной длины. Количество "срок-файлов" в блоке тоже может быть различным?

3. А ff точно внутри "строк" не встретится, что можно использовать его как служебный признак?


PS^ Похоже на INI файлы.  :)
« Последнее редактирование: 17 Февраля 2011, 05:40:04 от pumpkin »

Andy

  • Администратор Форумa
  • Эксперт
  • *
  • Сообщений: 1803
  • Карма: 15
  • Пол: Мужской
  • Нельзя отремонтировать то, что не сломано...
    • minilabmaster
    • Просмотр профиля
    • Форум "Минилаб-Мастер"
Re: Своя мини файловая система
« Ответ #6 : 17 Февраля 2011, 06:42:24 »
2. совершенно верно. причем строки могут быть текстовымыи и бинарными. количество строк-файлов в блоке одинаковое, но надо возможность в случае чего добавить новую строку во все кассы - вдруг какая фича в голову взбредет...
3. да, ff может и используется как конец блока данных. кроме этого можно задействовать другие служебные байты.
Заклинило деталь - надави на нее, если она сломалась - ничего, ее все равно надо было менять.

Andy

  • Администратор Форумa
  • Эксперт
  • *
  • Сообщений: 1803
  • Карма: 15
  • Пол: Мужской
  • Нельзя отремонтировать то, что не сломано...
    • minilabmaster
    • Просмотр профиля
    • Форум "Минилаб-Мастер"
Re: Своя мини файловая система
« Ответ #7 : 17 Февраля 2011, 06:48:48 »
Цитировать
PS^ Похоже на INI файлы

Блин, а точно, может не изобретать велосипед, а сделать все текстом? А бинарные блоки писать прямо в аски коде?
Заклинило деталь - надави на нее, если она сломалась - ничего, ее все равно надо было менять.

Andy

  • Администратор Форумa
  • Эксперт
  • *
  • Сообщений: 1803
  • Карма: 15
  • Пол: Мужской
  • Нельзя отремонтировать то, что не сломано...
    • minilabmaster
    • Просмотр профиля
    • Форум "Минилаб-Мастер"
Re: Своя мини файловая система
« Ответ #8 : 17 Февраля 2011, 07:10:28 »
Вчера вообще пришла идея сделать как на рисунке. данные заключать в скобки, перед скобкой номер файла, папки начинаются с ноля. Педед активацией дивайса пробегать по епиромке, найти адрес конца всех блоков касс, писать его в нулевой байт, потом пробежатся еще раз, и записать адреса начала папок после адреса конца блоков всех папок (кстати служебный символ - af). Получится этакое кэшрование. И ресурсов много не займет и в бинарнике наглядно....
Заклинило деталь - надави на нее, если она сломалась - ничего, ее все равно надо было менять.

pumpkin

  • Модератор Раздела
  • Профи
  • *
  • Сообщений: 240
  • Карма: 2
  • Пол: Мужской
  • Это Я :-)
    • Просмотр профиля
Re: Своя мини файловая система
« Ответ #9 : 17 Февраля 2011, 16:53:43 »
Так девайс только читает данные оттуда? Возможность модификации данных девайсом предусматривать не нужно?

Форум проекта "Минилаб-Мастер"

Re: Своя мини файловая система
« Ответ #9 : 17 Февраля 2011, 16:53:43 »

pumpkin

  • Модератор Раздела
  • Профи
  • *
  • Сообщений: 240
  • Карма: 2
  • Пол: Мужской
  • Это Я :-)
    • Просмотр профиля
Re: Своя мини файловая система
« Ответ #10 : 17 Февраля 2011, 16:58:51 »
В принципе все упирается в наглядность, и необходимость редактирования в HEX-редакторе. Если написать небольшой редактор для компа, то можно было-бы сделать оптимальнее.

В твоем случае скобки хороший вариант. Можно два вида скобок использовать - папки [] и файлы (), например:
[1(1Орион)(2GGGGGG)(3dsjfskjdf)][2(1EKU-333)(2sdhgfhd)(3cvcvcvc)] и т.д.

Bur

  • Профи
  • ****
  • Сообщений: 237
  • Карма: 0
  • Пол: Мужской
  • Это Я :-)
    • Просмотр профиля
Re: Своя мини файловая система
« Ответ #11 : 18 Февраля 2011, 02:40:18 »
А информации о устройстве FAT или NTFS нет? Там, по моему те же проблемы решаются.
+79996860525

Andy

  • Администратор Форумa
  • Эксперт
  • *
  • Сообщений: 1803
  • Карма: 15
  • Пол: Мужской
  • Нельзя отремонтировать то, что не сломано...
    • minilabmaster
    • Просмотр профиля
    • Форум "Минилаб-Мастер"
Re: Своя мини файловая система
« Ответ #12 : 18 Февраля 2011, 03:20:19 »
Под bascom есть библиотека под fat16/32. Но она занимает в памяти контроллера 4 кб - что очень расточительно для моих целей.
Заклинило деталь - надави на нее, если она сломалась - ничего, ее все равно надо было менять.

Andy

  • Администратор Форумa
  • Эксперт
  • *
  • Сообщений: 1803
  • Карма: 15
  • Пол: Мужской
  • Нельзя отремонтировать то, что не сломано...
    • minilabmaster
    • Просмотр профиля
    • Форум "Минилаб-Мастер"
Re: Своя мини файловая система
« Ответ #13 : 18 Февраля 2011, 03:36:35 »
Все записываемые данные я храню в eeprom контроллера- дивайс запоминает последние введенные данные - пароли, даты, количество снятых отчетов и тд. Пишется во внешнюю eeprom пока только когда надо зашить прошивку с ком порта. Кстати, скорость записи с ком порта в eeprom невелика - 1200 кбит. Если интерестно - скорость чтения из внешнег eeprom - примерно 5 килобайт в секунду. Это при чтении по 1 байту. При частоте тактирования шины i2c 400 килогерц. Но есть море возможности оптимизации - частоту шины можно поднять до 1 мегагерца, и читать блоками.   
Заклинило деталь - надави на нее, если она сломалась - ничего, ее все равно надо было менять.

Andy

  • Администратор Форумa
  • Эксперт
  • *
  • Сообщений: 1803
  • Карма: 15
  • Пол: Мужской
  • Нельзя отремонтировать то, что не сломано...
    • minilabmaster
    • Просмотр профиля
    • Форум "Минилаб-Мастер"
Re: Своя мини файловая система
« Ответ #14 : 18 Февраля 2011, 03:46:07 »
Все-таки решил делать аналог ini файла. В размере правда не выигрываю, (плачу, на один байт бинарного кода тратится 3 байта в тексте) но удобство налицо. Заодно с текстовиками работать научусь....
Заклинило деталь - надави на нее, если она сломалась - ничего, ее все равно надо было менять.

Форум проекта "Минилаб-Мастер"

Re: Своя мини файловая система
« Ответ #14 : 18 Февраля 2011, 03:46:07 »