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

Организация памяти EEPROM

Всем привет.

Есть такая задача хранить в еепром записи.

Выглядит это примерно так

[record1] [data1][data2][data3][data4][data5]

[record2] [data1]

[record3] [data1][data2][data3][data4]

 

Они все разной длины, и мне нужно иметь возможность искать, удалять, редактировать эти записи. Если для поиска Можно сделать отдельную табличку с номерм записи и ее адресом в памяти и поиск производит просто по таблице, то вот добавить поля к записи уже сложнее, а с удалением тоже трудности если просто их удалять, то память быстро станет фрагментированой.

Может есть какие-нибудь способы нечто вроде двоичного дерева поиска или еще чего?

 

Пишу на си под АВР

Изменено пользователем z-ram

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


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

В чем проблема-то... при удалении все сгребаете в начало, чтобы данные всегда были непрерывным куском.

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


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

В чем проблема-то...
В быстром исчерпании ресурса начала eeprom? В скорости процесса сдвигания (если память большая, а двигаем почти все ее содержимое)?

 

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


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

можно предложить однонаправленный или двунаправленный связанный список (смотря в каких направлениях нужно проходить)

и два вспомогательных связанных списка для хранения свободных ячеек и занятых

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


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

Надуманная постановка задачи. Нужно привести все записи к более удобоваримому виду, и затолкать их в один или несколько циклических буферов.

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


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

Надуманная постановка задачи. Нужно привести все записи к более удобоваримому виду, и затолкать их в один или несколько циклических буферов.

 

А как узнать лего и быстро найти нужную запись по адресу? Попутно составить список адресов и номеров записей в памяти?

 

Вот сделал я циклический буфер натолкал туда 1000 записей, затем мне нужно найти 50 разных записей в разных местах буфера, затем удалить их или отредактировать.

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


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

FatFS от Чена?

eeprom обычно маленькие вроде. одна только фат таблица дофига займет. ну и ресурс, да.

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


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

Я бы предложил вам что-то вроде по аналогии с реализацией хэш-таблиц.

Формат записи: номер, длина, данные, чексум, флаг стертости.

Вся память делится на несколько связанных списков размером минимум в три страницы памяти.

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

При переходе в связанном списке через ноль, он переформатируется и удаляются старые записи.

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


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

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

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

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

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

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

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

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

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

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