Существует несколько подходов, выбор зависит от размера EEPROM, максимального количества записей (обозначим через N) и максимального размера записи (пусть это будет S): Первый подход довольно очевиден: if (N * S) < = свободный размер EEPROM, тогда вы можете просто выделить равные блоки максимального размера для каждой записи. Например, если размер EEPROM равен 2048, а каждая запись имеет максимальный размер 31 байт и не более 64 записей, вы можете выделить 64 записи по 32 байта каждый, используя первый байт, чтобы обозначить размер записи.
Если размер каждой записи может варьироваться в широком диапазоне, или общее количество не определено (Вы хотите ель как можно больше), то есть два фрагментации подходов:
1) дефрагментация данных. Каждый раз, когда нет непрерывного блока требуемого размера, вы будете перемещать все данные, пока не будет свободного блока требуемого размера.
Например, если размер записи варьируется в пределах 127 байт, вы можете использовать первый байт для обозначения типа и размера блока. Например. старший бит равен 1 - когда блок свободен, 0 - если он содержит данные. Более низкие 7 бит содержат размер блока. Этот подход достаточно хорош, но поскольку данные перемещаются, может потребоваться соответствующим образом обновить все ссылки на данные.
2) Храните данные фрагментированными. Вы можете выделить количество блоков определенного размера (например, 32 байта каждый = максимум 64 записи для EEPROM 2048 байт). Первый будет содержать индекс блока, где данные продолжаются, скажем, 0xFE - значение для последнего блока в цепочке, 0xFF - для обозначения пустого блока. Остальные 31 байт блока содержат данные. Это может сделать процесс чтения несколько более сложным, но местоположение данных для каждой записи будет неизменным в течение целого периода времени.
Какова максимальная и минимальная длина записи? Сколько записей? –
около 3000 записей и минут около 40, а max - 80 байт, и я использую внешнюю память, но моя проблема в организации. как легко найти и получить доступ к записям – ZonderComand
У вас, вероятно, есть 3000x80 байт, я бы, вероятно, сделал все записи 80 или, может быть, 128 байт, чтобы выровнять их с потенциальными границами страниц. Как «поиск» записей зависит от того, что вы ищете. Я не думаю, что какая-то сортировка имела бы смысл, но, возможно, какая-то индексация/маркировка/группировка. –