Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вопрос по OMAP L-138
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
alexey123_45
Здравствуйте.
Не мог ли кто-то помочь в решении такой проблемы: Мне нужно каждую секунду передавать массив(результат расчета алгоритма) из DSP в ARM ядро. Я делаю это через DSP link. Объем массива 1200 байт.
В ARM ядре я этот массив обрабатываю и пишу в файл, находящийся на USB флэш. Помимо этого я пишу в этот же файл еще один поток раз в три секунды объемом 2 килобайта. Пишу на лету, обработал и сразу записал.
Переодически поступают неверные данные из DSP. Причем абсолютно в случайные моменты времени. Если убираю функцию записи в файл сбои исчезают. При этом данные я смотрю на консоли.

Как запись в файл может влиять на работу DSP или dsplink?
Dron_Gus
Например неправильно заданное окно общения для DSPlink. Точнее ситуация когда ядро не знает об этом окне. sm.gif
alexey123_45
Не подскажите как это можно отследить?

В ARM ядре я жду сообщение от DSP
/* Receive the message */
status = MSGQ_get (gppMsgq, WAIT_FOREVER, (MSGQ_Msg *)&msg) ;
if (DSP_FAILED (status)) {
printf ("MSGQ_get () failed. Status = [0x%x]\n",(Uint16)status) ;
}

Дожидаюсь посылаю обратно данные
/*Send the same message received in earlier MSGQ_get () call */
status = MSGQ_put (dspMsgq, (MSGQ_Msg)msg);

Соответственно в DSP я посылаю сообщение
msgqStatus = MSGQ_put(dstMsgQueue , (MSGQ_Msg)outputMsg);
if (msgqStatus != SYS_OK) {
SYS_abort("Failed to send a message to process function");
}
Dron_Gus
Честно говоря уже не помню. Кажется, ядру передавался параметр mem=size@location mem=size2@location2 или подобное. Таким образом резервировалась область для общения с DSP.
PS верно помню. http://processors.wiki.ti.com/index.php/GS...-L138_EVM_board
alexey123_45
Посмотрел, беру я правильно. Сбоев указателей не происходит. У меня такой вопрос - не могут ли драйвера в самом Linux для SDHC и USB давать какое-то прерывание или как-то подвешивать DSP?
jcxz
Цитата(alexey123_45 @ May 24 2017, 12:45) *
Посмотрел, беру я правильно. Сбоев указателей не происходит. У меня такой вопрос - не могут ли драйвера в самом Linux для SDHC и USB давать какое-то прерывание или как-то подвешивать DSP?

Всё возможно конечно, но 99.9% вероятность, что баг в Вашем коде. laughing.gif
А если всё-таки грешите на линух - так не пользуйтесь им. laughing.gif
Межъядерный обмен там элементарный - достаточно небольшого куска общей памяти и пары прерываний (одно - к ARM-ядру, другое - к DSP).
Ну и ещё конечно - желательно запретить кеширование для этого куска памяти.
alexey123_45
От Linux я на данном этапе отказаться уже не могу. Думаю и c Linux все решаемо если знать как. А вот насчет кэширования - спасибо, я об этом не подумал
Tarbal
Трудно сказать что может быть.
Куда идти:
Если вам удастся найти критерий отличия хороших данных от неверных, то можно написать код, который пишет в лог разную информацию, включая признак неверности данных кода. Из разных мест вы пишите иникальный идентификатор.
Дальше анализируйте результат.
alexey123_45
Я разобрался, но пока не пойму как исправить. Это происходит когда что-то пишешь на USB флэш. Т.е. стоит обратиться к USB флэш происходят сбои
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.