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

 
 
 
Reply to this topicStart new topic
> Вопрос по OMAP L-138
alexey123_45
сообщение May 24 2017, 06:34
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 69
Регистрация: 1-03-13
Пользователь №: 75 850



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

Как запись в файл может влиять на работу DSP или dsplink?
Go to the top of the page
 
+Quote Post
Dron_Gus
сообщение May 24 2017, 06:39
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 9-01-05
Из: Санкт-Петербург
Пользователь №: 1 861



Например неправильно заданное окно общения для DSPlink. Точнее ситуация когда ядро не знает об этом окне. sm.gif


--------------------
Если сверху смотреть, то сбоку кажется, что снизу ничего не видно.
Go to the top of the page
 
+Quote Post
alexey123_45
сообщение May 24 2017, 06:43
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 69
Регистрация: 1-03-13
Пользователь №: 75 850



Не подскажите как это можно отследить?

В 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");
}


Сообщение отредактировал alexey123_45 - May 24 2017, 06:53
Go to the top of the page
 
+Quote Post
Dron_Gus
сообщение May 24 2017, 08:48
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 9-01-05
Из: Санкт-Петербург
Пользователь №: 1 861



Честно говоря уже не помню. Кажется, ядру передавался параметр mem=size@location mem=size2@location2 или подобное. Таким образом резервировалась область для общения с DSP.
PS верно помню. http://processors.wiki.ti.com/index.php/GS...-L138_EVM_board


--------------------
Если сверху смотреть, то сбоку кажется, что снизу ничего не видно.
Go to the top of the page
 
+Quote Post
alexey123_45
сообщение May 24 2017, 10:45
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 69
Регистрация: 1-03-13
Пользователь №: 75 850



Посмотрел, беру я правильно. Сбоев указателей не происходит. У меня такой вопрос - не могут ли драйвера в самом Linux для SDHC и USB давать какое-то прерывание или как-то подвешивать DSP?

Сообщение отредактировал alexey123_45 - May 24 2017, 10:45
Go to the top of the page
 
+Quote Post
jcxz
сообщение May 24 2017, 10:54
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(alexey123_45 @ May 24 2017, 12:45) *
Посмотрел, беру я правильно. Сбоев указателей не происходит. У меня такой вопрос - не могут ли драйвера в самом Linux для SDHC и USB давать какое-то прерывание или как-то подвешивать DSP?

Всё возможно конечно, но 99.9% вероятность, что баг в Вашем коде. laughing.gif
А если всё-таки грешите на линух - так не пользуйтесь им. laughing.gif
Межъядерный обмен там элементарный - достаточно небольшого куска общей памяти и пары прерываний (одно - к ARM-ядру, другое - к DSP).
Ну и ещё конечно - желательно запретить кеширование для этого куска памяти.
Go to the top of the page
 
+Quote Post
alexey123_45
сообщение May 24 2017, 11:16
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 69
Регистрация: 1-03-13
Пользователь №: 75 850



От Linux я на данном этапе отказаться уже не могу. Думаю и c Linux все решаемо если знать как. А вот насчет кэширования - спасибо, я об этом не подумал
Go to the top of the page
 
+Quote Post
Tarbal
сообщение May 25 2017, 01:39
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Трудно сказать что может быть.
Куда идти:
Если вам удастся найти критерий отличия хороших данных от неверных, то можно написать код, который пишет в лог разную информацию, включая признак неверности данных кода. Из разных мест вы пишите иникальный идентификатор.
Дальше анализируйте результат.
Go to the top of the page
 
+Quote Post
alexey123_45
сообщение Jun 5 2017, 22:01
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 69
Регистрация: 1-03-13
Пользователь №: 75 850



Я разобрался, но пока не пойму как исправить. Это происходит когда что-то пишешь на USB флэш. Т.е. стоит обратиться к USB флэш происходят сбои
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 13:27
Рейтинг@Mail.ru


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