Jump to content

    
Sign in to follow this  
z-ram

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

Recommended Posts

Всем привет.

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

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

[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
В чем проблема-то...
В быстром исчерпании ресурса начала 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

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

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

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

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this