[an error occurred while processing this directive]
Руками не всегда удобно, да и затруднительно бывает.
(«Телесистемы»: Конференция 'Цифровые сигнальные процессоры (DSP) и их применение')

миниатюрный аудио-видеорекордер mAVR

Отправлено -=ВН=- 01 декабря 2004 г. 17:35
В ответ на: И все-тки мое эстетическое чувство страдает. Да и руками как-то спокойнее. Тем более, что если я буду делать разные манипуляции со статически расположенным массивом, то это тоже можно гордо назвать собственным менеджером кучи :) отправлено GRD 01 декабря 2004 г. 15:11

Вот раскажу сейчас об одной задаче вкратце, где я в первый раз соорудил свой менеджер памяти. Или не менеджер, т.к. правильного названия не знаю. Но занимался он как раз динамическим выделением памяти. Расказ наверное долгим будет, так что или не читайте, если не интересно, или терпения наберитесь:-)
Задача из области RFID. Метки (таги) пассивные.
Есть устройство, базовая станция, которая излучает некоторый сигнал.
Каждый таг, находящийся в поле зрения :-) станции, этот сигнал отражает, но по разному, в зависимости от кода тага.
Задача станции проста - поймать эти отраженные сигналы, как-то их обработать и в результате понять, какие таги видны и определить их местоположение. Один из способов - записывать отклики каждого тага, а потом искать корреляцию принятого сигнала с каждым из записанных откликов.
Вот базовую станцию мы и делали. Поначалу речь шла о max 1000 тагов, видимых одновременно. Такое задание было.
Отклик каждого тага укладывался в 512 слов 16-ти разрядных.
Делали на процессоре adsp2187 с прицепленной внешней памятью в 1 мегаслово. Производительности процессора хватало, памяти внешней - почти с двойным запасом.
Если не знаете - у ADSP218X страничная организация памяти, по 8 килослов. Внешняя шина адреса 13-ти разрядная. Так что адресация мегаслова напрямую невозможна. Через что-то дополнительное, хоть GPIO, хоть что. Да и C для него как-то не очень. Писал на ассемблере.
Ну и с размещением образцовых откликов поначалу никаких проблем.
Массивчик на 1000. Каждый элемент соответствует 512-ти словному блоку памяти. 0 блок свободен, 1 - занят. Все просто.
Сделали. Работает. У заказчика аппетит стал расти. Хотим больше тагов, говорят. 2000. Но у нас с собою было:-) 2000 так 2000, памяти хватает. Дальше больше, от 4000 до 10000 хотим. Лучше 10000, но даже на 4000 согласны. Мы возражаем, говорим, что память совсем не резиновая. И что надо хоть чуть-чуть изменить схему, добавить памяти, изготовить платы. Нет, говорят, это долго, это потом, вы на имеющемся железе что-нибудь придумайте. В конце-концов уговорили, да и сопротивлялись мы для профилактики, потому, что мысли всякие были. Ну вот напридумывали. Но теперь решили не отклики хранить, а некие функции от них. Но вот длина у них переменной получалась.
От 16 до 256. Искусственно кратная 16. Ну и как тут быть?
4000- 10000 это максимум. Какие именно там будут таги, какого размера будут функции от их откликов - хз. Да и в процессе работы одни таги исчезают, другие появляются. Жизнь идет, короче.
Вот ничего лучше, чем соорудить самопальный диспетчер я не придумал.
И даже если бы на C писал - вряд ли получилось бы стандартными calloc-ами и т.п. Потому что прямо адресуются только 8 к.
А потом сооружал и в техасовских 62-х.
Тоже куча объектов, появляющихся, исчезающих.
Но в 62-х можно наверное и стандартными alloc-ами всевозможными обойтись, я уже из любви к искусству, так сказать:-)
В общем я хотел сказать, что нужда может возникнуть.


Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru