реклама на сайте
подробности

 
 
> Работа с блоками данных переменной длины, Изменение типа, удаление, добавление
SZ0
сообщение Oct 5 2008, 18:58
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 326
Регистрация: 14-02-06
Пользователь №: 14 331



Стоит задача.
Обработка блоков данных, при этом блоки могут быть разных размеров, у каждого блока 1й байт определяет его тип, по которому мы знаем его размер. Любой блок может быть стёрт или изменён на другой тип.

Проблема и решения.
Перемещение на N блок для его обработки: номер блока собираюсь расчитывать от 1го, т.е. узнаем размер 1го, перешли ко 2му, узнали его размер и так далее.
Стирание блока: выясняем размер по типу следующего за ним блока, сдвигаем на пустое место которое очистил блок, потом следущий за ним и так до последнего блока.
Изменения типа: перед изменением программа оценивает сколько памяти осталось, и в зависимости от выбранного нового типа блока все блоки после изменнённого либо отодвигаются от него либо пододвгаются к нему.

Кто решал подобные задачи, в каком направлении думать ещё? Как ещё можно это всё реализовать попроще?
Всё это тянет к файловой системе (чего никода не делал), но думаю это будет сложновато для такой задачи.

Данные будут размещаться в РАМ ATmega2560 и там же обрабатываться, и все сохраняться/считываться из его eeprom при запуске
и сохраняться после настройки в РАМ.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 10)
one_man_show
сообщение Oct 5 2008, 19:29
Сообщение #2


Помогу, чем смогу
******

Группа: Админы
Сообщений: 2 786
Регистрация: 28-05-04
Из: Москва
Пользователь №: 25



Какой максимальный размер блока? Может все-таки внести избыточность, то есть сделать все блоки одинаковой длины, за счет этого упростить алгоритм...


--------------------
С уважением,
Ваган Саруханов
Проекты|Форум|Facebook|Linkedin
Go to the top of the page
 
+Quote Post
SZ0
сообщение Oct 5 2008, 20:31
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 326
Регистрация: 14-02-06
Пользователь №: 14 331



Цитата(one_man_show @ Oct 6 2008, 01:29) *
Какой максимальный размер блока? Может все-таки внести избыточность, то есть сделать все блоки одинаковой длины, за счет этого упростить алгоритм...


Не хотел писать smile.gif, а надо было.

Первоначально так и было, все блоки одинаковой длинны, и алгоритм обработки прост. Максимальный размер 86 байт, а внутренняя стурктура определялась по 1у байту идентификатора. И обращаться к любому блоку с такой стрктурой просто. Но заказчику стало мало, потребовалось создавать большее количество блоков, например меньших размеров (минимальный 8 байт) и больше гибкости в управлении блоками. Внешняя РАМ исключена, т.к. все ножки проца заняты.
Go to the top of the page
 
+Quote Post
SysRq
сообщение Oct 5 2008, 20:33
Сообщение #4


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



Ну.. Заложить под каждый из типов объектов свой pool, исходя из наверняка прикидываемого количества объектов каждого типа. Управлять на основе списка структур, в которых на расположение объекта в pool только ссылаться.
Go to the top of the page
 
+Quote Post
Guest_@Ark_*
сообщение Oct 5 2008, 21:01
Сообщение #5





Guests






Цитата(SZ0 @ Oct 5 2008, 22:58) *
Стоит задача.
Обработка блоков данных, при этом блоки могут быть разных размеров, у каждого блока 1й байт определяет его тип, по которому мы знаем его размер. Любой блок может быть стёрт или изменён на другой тип...

Если по-проще, то сразу закладывайтесь на блоки фиксированного размера. Размер блока нужно выбирать кратным 2^N (чтобы проще было вычислять адреса) и таким, чтобы его легко можно было обрабатывать - помещать во временный буфер, копировать, перемещать. Не слишком большим и не слишком маленьким. Выбирайте из ряда: 16, 32, 64, 128, 256 байт/на блок. Одна запись будет занимать один или несколько блоков.
Нужно зафиксировать формат блока и предусмотреть в нем признаки первого блока записи, количество блоков, признак пустого блока (напр.: кол-во блоков записи=0), контрольную сумму- ессно! Если необходимо сохранить определенный порядок при удалении/вставке записей, введите в формат данных указатель на следующую запись.
Размещаете записи последовательно. Каждая должна начинаться с нового блока. Дописываете новые записи в конец (нужен указатель начала свободной области). При удалении записи объявляете блоки пустыми, но ничего не сдвигаете. Сборкой мусора занимаетесь только когда исчерпаете свободную область.
Не очень все будет эффективно (особенно поиск), но зато обойдетесь без таблицы размещения.
В конце-концов Вы просили как по-проще...
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Oct 5 2008, 22:53
Сообщение #6


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



А я бы остановился на алгоритме первоначальном.
Он, несмотря на кажущуюся неэффективность - лучший. Потому что дубовый. Стопроцентный.
Т.е. не требует какой-то отладки и поиска ошибок.

Единственное - скорость не слишком. И то - не факт.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
one_man_show
сообщение Oct 6 2008, 05:26
Сообщение #7


Помогу, чем смогу
******

Группа: Админы
Сообщений: 2 786
Регистрация: 28-05-04
Из: Москва
Пользователь №: 25



Сразу прошу прощения, если прозвучат обидные слова, честное слово, не хочу обидеть. На мой взгляд, есть явные просчеты не в алгоритме или выборе структуры...Скорее всего неверно выбрана элементная база для реализации проекта, раз отсутствует запас. Ведь постоянно приходится сталкиваться с аппетитом Заказчика, который приходит во время еды. Если не секрет, раскройте бюджет проекта.


--------------------
С уважением,
Ваган Саруханов
Проекты|Форум|Facebook|Linkedin
Go to the top of the page
 
+Quote Post
MMos
сообщение Oct 6 2008, 06:48
Сообщение #8


Частый гость
**

Группа: Участник
Сообщений: 147
Регистрация: 7-12-07
Пользователь №: 33 057



У одного персонажа детской литературы (медика по профессии) был универсальный рецепт: "Касторка и йод!" Автору вопроса я бы в подобном стиле прописал: "Кластеры и таблица размещения!" Для более подробного совета нужна дополнительная информация.
Go to the top of the page
 
+Quote Post
SZ0
сообщение Oct 6 2008, 15:32
Сообщение #9


Местный
***

Группа: Участник
Сообщений: 326
Регистрация: 14-02-06
Пользователь №: 14 331



Цитата(one_man_show @ Oct 6 2008, 11:26) *
Если не секрет, раскройте бюджет проекта.


Бюджет не я устанавливаю, я только ПО пишу на заказ.
Go to the top of the page
 
+Quote Post
one_man_show
сообщение Oct 6 2008, 15:37
Сообщение #10


Помогу, чем смогу
******

Группа: Админы
Сообщений: 2 786
Регистрация: 28-05-04
Из: Москва
Пользователь №: 25



Понимаю. Спросил, чтобы понять, рентабельно ли напрагяться поднимать сложный алгоритм доступа к данным. С опытом выработался подход, при котором ценишь свое время smile.gif то есть при стоимости изделия в пределах ста зеленых не имеет смысла "городить огород", проще подвести Заказчика к мысли, что для его аппетитов нужно делать новую железку. Не всегда срабатывает, но тем не менее...


--------------------
С уважением,
Ваган Саруханов
Проекты|Форум|Facebook|Linkedin
Go to the top of the page
 
+Quote Post
SZ0
сообщение Oct 6 2008, 15:40
Сообщение #11


Местный
***

Группа: Участник
Сообщений: 326
Регистрация: 14-02-06
Пользователь №: 14 331



Цитата(MMos @ Oct 6 2008, 12:48) *
я бы в подобном стиле прописал: "Кластеры и таблица размещения!" Для более подробного совета нужна дополнительная информация.


Всё и подходит к таблицам размещения. Но кажется приближаемся в обсуждениях к жёсткой фиксации блоков в памяти разбивая их сразу по типам на начальном этапе, что должно упростить задачу.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 08:46
Рейтинг@Mail.ru


Страница сгенерированна за 0.01451 секунд с 7
ELECTRONIX ©2004-2016