Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Цифровые сигнальные процессоры (DSP) и их применение»

Непонятность с VDK: возникает исключение непонятно почему, Спецы по VDK и Tiger Shark ADSP-TS20x просьба - помогите

Отправлено Dimonira 08 июня 2007 г. 09:05


Начал осваивать софт Tiger Shark ADSP-TS20x, а именно VisualDSP++ 4.5 (SP feb-2007) и VDK.
Пишу приложение для обмена Ethernet-пакетами. Плата своей разработки, мак-контроллер в матрице. Железо проверено, работает.
Заткнулся, можно сказать, в самом начале. Приложение живёт до трёх приёмов пакетов Ethernet. Потом зацикливается, я его прерываю - приложение висит в обработчике UserExceptionHandler. Судя по всему оно туда попадает из обработчика _tmk_ExceptionHandler. А как оно туда забредает - не понятно.
Приём делается по двум прерываниям. Одно генерируется при заполнении одного приёмного ФИФО целым пакетом, другое - другого. В программе есть два обработчика этих прерываний, которые только стартуют один из каналов ДМА на пересылку из ФИФО в статически выделенные буферы памяти (их тоже два) и запрещают своё же прерывание (оно разрешится в другом месте позже, это я сделал т.к. прерывания сделаны уровнем, а уровень снимется только когда ДМА всё выкачает из ФИФО). Есть два обработчика прерываний ДМА, где только выставляются семафоры о конце приёма пакетов. Эти семафоры ждут два процесса (можно, видимо, было и одним обойтись, но сейчас два). В этих процессах выделяется буфер из пула под каждый пакет, туда переписывается пакет (с форматированием), создаётся сообщение с адресом этого буфера (т.е. передаётся только указатель), посылается одному процессу обработки пакетов и разрешаются прерывания (т.е. то, которое было запрещено ранее). Процесс обработки пакетов ждёт сообщения от любого из процессов приёма, извлекает указатель из сообщения, обрабатывает данные (пока ничего), освобождает память из-под пакета (та что из пула) и удаляет сообщение.
Так вот, всё встаёт когда третий раз (сейчас так, до этого было сделано по-другому, тогда то один пакет принимался, то два) пакет принимается, вроде как должно быть послано сообщение, но процесс обработки его не принимает. А после хальта оказываюсь в цикле обработки исключения.
Т.е. получается, что по два раза каждый процесс проходит полный цикл, но потом по каким-то причинам возникает исключение. Пробовал ставить точки останова на обработчиках исключений моих процессов, но туда не попадаю. Получается, что исключение генерится операционкой, судя по всему диспетчером. Но почему?

Прошу не пинать, софт для меня новый, процессор тоже новый, таких не программировал раньше.
Кто что скажет/посоветует?
Если надо, могу куски кода привести.

PS. Можно, конечно написать софт без VDK, там то уж точно будет всё под моим контролем. Но мне кажется, мороки с диспетчеризацией м.б. больше. Да и просто велосипед изобретать нет желания.

Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
при вычитании трёх из шести получится:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru