|
Хранилище "Key->Value" для EEPROM |
|
|
|
 |
Ответов
|
Jun 13 2015, 05:02
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(ViKo @ Jun 11 2015, 10:09)  В начале EEPROM создать таблицу, в которой хранить номер-идентификатор (если он нужен), смещение в памяти (чтобы не складывать все размеры при поиске), размер записи. Дальше размещать сами записи. При стирании перемещать записи на свободное место, корректировать номер и смещение. Таблица не нужна. Создаём обычный журнал: длина записи - переменная, имеется фикс. заголовок, после которого - пользовательские данные переменной длины указанной в заголовке; в заголовке также указан ID записи (а также CRC и т.п. по желанию). В заголовке есть флажок валидности записи (1 бит). Новые записи добавляются в конец журнала. Для чтения записи с конца журнала ищется первый попавшийся ID равный нужному. При добавлении записи с ID, который уже есть в журнале, в заголовке старой записи снимается флажок валидности (set 0). В новой записи флаг валидности set 1 (если стёртое состояние флешь == 1). При налезании текущего хвоста журнала на его голову, анализируем какие записи в затирамеой части остались валидны, их перезаписываем в хвост. Такой алгоритм можно использовать и на флешь (где доступ по стиранию поблочный, а не байтовый). Чем больше объём использумой под журнал флешь - тем лучше - меньше износ. Для ускорения поиска в ОЗУ можно хранить таблицу соответствия номеров записей журнала определённым ID. Создавать её при старте ПО, обновлять при добавлении записей в журнал.
|
|
|
|
|
Jun 14 2015, 05:39
|
Профессионал
    
Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075

|
Цитата(jcxz @ Jun 13 2015, 11:02)  Таблица не нужна. Создаём обычный журнал: длина записи - переменная, имеется фикс. заголовок, после которого - пользовательские данные переменной длины указанной в заголовке; в заголовке также указан ID записи (а также CRC и т.п. по желанию). В заголовке есть флажок валидности записи (1 бит). Новые записи добавляются в конец журнала. Для чтения записи с конца журнала ищется первый попавшийся ID равный нужному. При добавлении записи с ID, который уже есть в журнале, в заголовке старой записи снимается флажок валидности (set 0). В новой записи флаг валидности set 1 (если стёртое состояние флешь == 1). При налезании текущего хвоста журнала на его голову, анализируем какие записи в затирамеой части остались валидны, их перезаписываем в хвост.
Такой алгоритм можно использовать и на флешь (где доступ по стиранию поблочный, а не байтовый). Чем больше объём использумой под журнал флешь - тем лучше - меньше износ. Для ускорения поиска в ОЗУ можно хранить таблицу соответствия номеров записей журнала определённым ID. Создавать её при старте ПО, обновлять при добавлении записей в журнал. а адресс заголовка где храниться? а понял. то есть если я хочу найти 10-ю запись я должен просуммировать 9 размеров + офсет? нет что то не вяжется. вобщем как ни крути а надо создавать что то вроде а ля фат.
Сообщение отредактировал Jenya7 - Jun 14 2015, 05:52
|
|
|
|
Сообщений в этой теме
ArtDenis Хранилище "Key->Value" для EEPROM Jun 9 2015, 12:14 RabidRabbit Самое простое - использовать в качестве ключа смещ... Jun 9 2015, 18:26 alexeyv ЦитатаСамое простое - использовать в качестве ключ... Jun 10 2015, 03:05 _Pasha ТС, Вы ничего не сказали об интенсивности стираний... Jun 10 2015, 03:42 ArtDenis Цитата(RabidRabbit @ Jun 9 2015, 23:26) С... Jun 10 2015, 04:41 AlexandrY Цитата(ArtDenis @ Jun 9 2015, 15:14) Пред... Jun 10 2015, 05:08 ArtDenis Цитата(AlexandrY @ Jun 10 2015, 10:08) Та... Jun 10 2015, 05:15  AlexandrY Цитата(ArtDenis @ Jun 10 2015, 08:15) Я н... Jun 10 2015, 05:31   ArtDenis Цитата(AlexandrY @ Jun 10 2015, 10:31) Ес... Jun 10 2015, 05:37    AlexandrY Цитата(ArtDenis @ Jun 10 2015, 08:37) Как... Jun 10 2015, 07:17     ArtDenis Цитата(AlexandrY @ Jun 10 2015, 12:17) Не... Jun 10 2015, 07:30 psL на самом деле в key-value данные хранятся по хешу ... Jun 10 2015, 05:40 esaulenka Цитата(psL @ Jun 10 2015, 08:40) Придумат... Jun 10 2015, 06:41 RabidRabbit Так и почитайте о файловых системах, решение к Вам... Jun 10 2015, 05:42 ArtDenis Цитата(psL @ Jun 10 2015, 10:40) на самом... Jun 10 2015, 05:55 Эдди Чтобы пореже стирать EEPROM, мне как-то предлагали... Jun 10 2015, 08:41 ArtDenis Эдди, спасибо за идею! Хотя у меня есть подозр... Jun 10 2015, 09:47 Эдди Цитата(ArtDenis @ Jun 10 2015, 12:47) Эдд... Jun 11 2015, 04:31  ArtDenis Цитата(Эдди @ Jun 11 2015, 09:31) Пишете ... Jun 11 2015, 04:37 mcheb Цитата(ArtDenis @ Jun 9 2015, 15:14) Пред... Jun 10 2015, 09:55 ar__systems А че так сложно-то все? Данных всего - каких-то жа... Jun 10 2015, 10:17  AHTOXA Цитата(ar__systems @ Jun 10 2015, 15:17) ... Jun 11 2015, 03:44 Сергей Борщ Гляньте minIni. Это не совсем то, что вам нужно - ... Jun 10 2015, 10:22 _Pasha Цитата(ViKo @ Jun 11 2015, 07:09) ЗЫ. Таб... Jun 13 2015, 01:41   jcxz Цитата(Jenya7 @ Jun 14 2015, 11:39) а адр... Jun 14 2015, 08:29 zltigo QUOTE (ArtDenis @ Jun 9 2015, 15:14) Пред... Jun 14 2015, 06:22
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|