alexey123_45 0 24 мая, 2017 Опубликовано 24 мая, 2017 · Жалоба Здравствуйте. Не мог ли кто-то помочь в решении такой проблемы: Мне нужно каждую секунду передавать массив(результат расчета алгоритма) из DSP в ARM ядро. Я делаю это через DSP link. Объем массива 1200 байт. В ARM ядре я этот массив обрабатываю и пишу в файл, находящийся на USB флэш. Помимо этого я пишу в этот же файл еще один поток раз в три секунды объемом 2 килобайта. Пишу на лету, обработал и сразу записал. Переодически поступают неверные данные из DSP. Причем абсолютно в случайные моменты времени. Если убираю функцию записи в файл сбои исчезают. При этом данные я смотрю на консоли. Как запись в файл может влиять на работу DSP или dsplink? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dron_Gus 2 24 мая, 2017 Опубликовано 24 мая, 2017 · Жалоба Например неправильно заданное окно общения для DSPlink. Точнее ситуация когда ядро не знает об этом окне. :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexey123_45 0 24 мая, 2017 Опубликовано 24 мая, 2017 (изменено) · Жалоба Не подскажите как это можно отследить? В 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"); } Изменено 24 мая, 2017 пользователем alexey123_45 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dron_Gus 2 24 мая, 2017 Опубликовано 24 мая, 2017 · Жалоба Честно говоря уже не помню. Кажется, ядру передавался параметр mem=size@location mem=size2@location2 или подобное. Таким образом резервировалась область для общения с DSP. PS верно помню. http://processors.wiki.ti.com/index.php/GS...-L138_EVM_board Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexey123_45 0 24 мая, 2017 Опубликовано 24 мая, 2017 (изменено) · Жалоба Посмотрел, беру я правильно. Сбоев указателей не происходит. У меня такой вопрос - не могут ли драйвера в самом Linux для SDHC и USB давать какое-то прерывание или как-то подвешивать DSP? Изменено 24 мая, 2017 пользователем alexey123_45 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 234 24 мая, 2017 Опубликовано 24 мая, 2017 · Жалоба Посмотрел, беру я правильно. Сбоев указателей не происходит. У меня такой вопрос - не могут ли драйвера в самом Linux для SDHC и USB давать какое-то прерывание или как-то подвешивать DSP? Всё возможно конечно, но 99.9% вероятность, что баг в Вашем коде. :laughing: А если всё-таки грешите на линух - так не пользуйтесь им. :laughing: Межъядерный обмен там элементарный - достаточно небольшого куска общей памяти и пары прерываний (одно - к ARM-ядру, другое - к DSP). Ну и ещё конечно - желательно запретить кеширование для этого куска памяти. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexey123_45 0 24 мая, 2017 Опубликовано 24 мая, 2017 · Жалоба От Linux я на данном этапе отказаться уже не могу. Думаю и c Linux все решаемо если знать как. А вот насчет кэширования - спасибо, я об этом не подумал Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tarbal 4 25 мая, 2017 Опубликовано 25 мая, 2017 · Жалоба Трудно сказать что может быть. Куда идти: Если вам удастся найти критерий отличия хороших данных от неверных, то можно написать код, который пишет в лог разную информацию, включая признак неверности данных кода. Из разных мест вы пишите иникальный идентификатор. Дальше анализируйте результат. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexey123_45 0 5 июня, 2017 Опубликовано 5 июня, 2017 · Жалоба Я разобрался, но пока не пойму как исправить. Это происходит когда что-то пишешь на USB флэш. Т.е. стоит обратиться к USB флэш происходят сбои Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться