Разработка, производство и продажа радиоэлектронной аппаратуры
|
Требуется программист в Зеленограде - обработка данных с датчиков; ColdFire; 40 тыс.
e-mail: jobsmp@pochta.ru
|
Работа с блоками данных переменной длины
Отправлено
S 05 октября 2008 г. 23:03
Стоит задача.
Обработка блоков данных, при этом блоки могут быть разных размеров, у каждого блока 1й байт определяет его тип, по которому мы знаем его размер. Любой блок может быть стёрт или изменён на другой тип.
Проблема и решения.
Перемещение на N блок для его обработки: номер блока собираюсь расчитывать от 1го, т.е. узнаем размер 1го, перешли ко 2му, узнали его размер и так далее.
Стирание блока: выясняем размер по типу следующего за ним блока, сдвигаем на пустое место которое очистил блок, потом следущий за ним и так до последнего блока.
Изменения типа: перед изменением программа оценивает сколько памяти осталось, и в зависимости от выбранного нового типа блока все блоки после изменнённого либо отодвигаются от него либо пододвгаются к нему.
Кто решал подобные задачи, в каком направлении думать ещё? Как ещё можно это всё реализовать попроще?
Всё это тянет к файловой системе (чего никода не делал), но думаю это будет сложновато для такой задачи.
Данные будут размещаться в РАМ ATmega2560 и там же обрабатываться, и все сохраняться/считываться из его eeprom при запуске
и сохраняться после настройки в РАМ.
Составить ответ | Вернуться на конференцию
Ответы
- Очень накладно передвигать все блоки (+): - argus98 (06.10.2008 10:45:49 81.22.205.230, 444 байт)
- Посмотрите FAT... Лучшего ничего не придумать... - ETM (06.10.2008 00:29:21 62.117.85.106, пустое, ссылка)
- ИМХО не надо илобретать велосипед. Для этого в стандартных С-шных библиотеках придуманы malloc, realloc и free. Я бы начал с того, что проверил, нормально ли они реализованы в либах Вашего компилера. Если не повезло, и они "косые", написал бы что-то самодельное, аналогично устроенные. - Сидоргек (05.10.2008 23:21:40 91.124.193.159, пустое)
- А не придется всю бодягу закольцовывать? Вот хлебнешь. - VasilyS (05.10.2008 23:14:11 80.92.96.25, пустое)
- енто как? - S (06.10.2008 00:15:19 217.148.51.136, пустое)