Jump to content

    

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

Всем привет.

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

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

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

[record2] [data1]

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

 

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

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

 

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

Edited by z-ram

Share this post


Link to post
Share on other sites

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

Share this post


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

 

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
Надуманная постановка задачи. Нужно привести все записи к более удобоваримому виду, и затолкать их в один или несколько циклических буферов.

 

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

 

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

Share this post


Link to post
Share on other sites
FatFS от Чена?

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

Share this post


Link to post
Share on other sites

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

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

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

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

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this