sysel 0 2 ноября, 2011 Опубликовано 2 ноября, 2011 · Жалоба Здравствуйте! Закончил портирование FreeRTOS под ядро С674x. Точнее под DSP ядро OMAP-L138. Появилась первая, точнее ноль.первая бета версия. Задачи переключает, прерывания обрабатывает, т.е. ведёт себя вроде как надо. Сейчас активно тестирую этот порт. Всех желающих прошу подключиться и сообщать об ошибках тут. Выложил порт в форуме контрибуций на сайте FreeRTOS, прикрепляю сюда. Обращение к SM, как к гуру C6000 ассемблера: прошу Вас посмотреть .asm исходники на предмет правильного распараллеливания операций. P.S. Это мой второй(после ХэллоуВорлд) проект для C674x, так что прошу сильно не пинать. P.P.S. Взялся за этот порт, чтобы по-глубже вникнуть в архитектуру C6x и CCS. P.P.P.S. Долой монополию ДСПБИОСа ! C674x_freertos_port.zip Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 2 ноября, 2011 Опубликовано 2 ноября, 2011 · Жалоба Обращение к SM, как к гуру C6000 ассемблера: прошу Вас посмотреть .asm исходники на предмет правильного распараллеливания операций.[/i] А.. это... Компилятор-транслятор сразу скажет, если неправильно! Он больше гуру в этом, чем я :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sysel 0 2 ноября, 2011 Опубликовано 2 ноября, 2011 · Жалоба А.. это... Компилятор-транслятор сразу скажет, если неправильно! Он больше гуру в этом, чем я :) Компилятор на мои исходники не ругается вообще. Я пока не силён в работе конвейера С6000, поэтому есть вопросы без ответов: 1) Как проанализировать код на наличие stall-ов ? 2) Есть ли какие-то особые требования на выравнивание кода с параллельными инструкциями? 3) Когда я в коде пишу инструкцию "B регистр" и следующей строкой "NOP 5", компилятор мне иногда заменяет эти инструкции на "BNOP регистр,5", а иногда оставляет как написано. С чем может быть связано такое поведение? 4) Есть ли подводные камни(между инструкциями возникнет NMI/вмешается эмулятор и т.д.) в следующем коде (из реализации Interrupt Service Fetch Packet): MVD B0,B0 MVKL addr,B0 MVKH addr,B0 B B0 NOP 5 Задумка была сделать реализацию ISFP, не использующую стек для сохранения/восстановления B0. В пошаговом и непрерывном выполнении этого кода проблем не выявил. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 242 3 ноября, 2011 Опубликовано 3 ноября, 2011 · Жалоба Закончил портирование FreeRTOS под ядро С674x. Точнее под DSP ядро OMAP-L138. А зачем ОС на DSP-ядре если рядом ARM, которое вроде как и предназначено для таких дел? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 3 ноября, 2011 Опубликовано 3 ноября, 2011 · Жалоба Кстати вот еще конкурент (правильнее сказать альтернатива дспбиосу) потенциальный - http://www.linux-c6x.org/wiki/index.php/Releases на сколько я понимаю, TI довели свой компилятор до уровня GCC по расширениям. Компилятор на мои исходники не ругается вообще. Я пока не силён в работе конвейера С6000, поэтому есть вопросы без ответов: 1) Как проанализировать код на наличие stall-ов ? 2) Есть ли какие-то особые требования на выравнивание кода с параллельными инструкциями? 3) Когда я в коде пишу инструкцию "B регистр" и следующей строкой "NOP 5", компилятор мне иногда заменяет эти инструкции на "BNOP регистр,5", а иногда оставляет как написано. С чем может быть связано такое поведение? 4) Есть ли подводные камни(между инструкциями возникнет NMI/вмешается эмулятор и т.д.) в следующем коде (из реализации Interrupt Service Fetch Packet): MVD B0,B0 MVKL addr,B0 MVKH addr,B0 B B0 NOP 5 Задумка была сделать реализацию ISFP, не использующую стек для сохранения/восстановления B0. В пошаговом и непрерывном выполнении этого кода проблем не выявил. 1. А нету сталлов в С6000 (про 64/64+ не знаю, я с ними не работал, говорю только про 62хх/67хх). Если, например, невовремя после LDR сделать операцию с регистром, куда LDR, или возникнет прерывание, то просто-напросто операция посчитает не то, а LDR загрузит через несколько тактов. Поэтому, собственно, весь программно-конвейеризированный код обязательно исполняется с запрещенными прерываниями, и для этого в компилере есть "interrupt threshold", чтобы он мог реалтаймовость выдерживать. И еще в С6000 есть некоторые команды, после которых нельзя занимать юнит несколько тактов, например часть плавучки, об этом тоже не надо забывать. Эмулятор, в отличие от прерывания, не флушит конвейер, поэтому проблем не вызывает никогда. 2. нет. ну точнее на 32-битное слово, возможно в 64 что-то иначе. а если и есть, транслятор разберется. 3. не знаю. по идее всегда BNOP если 64хх надо. Или, как вариант, компилятор может быть припараллеливает B к предыдущей команде, если видит, что это безопасно. 4. Прерывание в этом куске (если возникнет между MVD и одним из MVK*) вам все испортит, точнее MVK испортит :), так что сохраняйте CSR, запрещайте прерывания, и впараллель с B их разрешайте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SimpleSoft 0 3 ноября, 2011 Опубликовано 3 ноября, 2011 · Жалоба Добрый день. Посмотрите документ Hand-Tuning Loops and Control Code on the TMS320C6000. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sysel 0 3 ноября, 2011 Опубликовано 3 ноября, 2011 · Жалоба Добрый день. Посмотрите документ Hand-Tuning Loops and Control Code on the TMS320C6000. Спасибо большое, за ссылку. Очень полезный документ для меня сейчас и на будущее. А зачем ОС на DSP-ядре если рядом ARM, которое вроде как и предназначено для таких дел? 1) Чтоб многопоточное приложение делать со всякими объектами синхронизации, очередями. 2) Чтоб изучить новую для меня архитектуру во всех нюансах, а не тупо кодить на Си, а потом удивляться, почему на ДСП цифровые фильтры на Си работают медленнее чем на ARM. 3) В моём проекте не хочу идти путём "поставить линух на ARM", хочу на ARM ядре тоже запустить FreeRTOS + lwIP. И чтоб всё это влезло в Shared RAM и место ещё осталось. .... Спасибо за ответы. Пока курю документацию, возразить ничего не могу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 3 ноября, 2011 Опубликовано 3 ноября, 2011 · Жалоба Спасибо за ответы. Кстати, сказали бы уж, ради чего экономия одного слова в стеке... Рекурсивная процедура что ли и стека мало? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sysel 0 3 ноября, 2011 Опубликовано 3 ноября, 2011 · Жалоба Кстати, сказали бы уж, ради чего экономия одного слова в стеке... Рекурсивная процедура что ли и стека мало? Понравилась инструкция MVD. С ней код сурово выглядит. А вообще ни кто не мешает мне тут стек использовать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 242 4 ноября, 2011 Опубликовано 4 ноября, 2011 · Жалоба 3) В моём проекте не хочу идти путём "поставить линух на ARM", хочу на ARM ядре тоже запустить FreeRTOS + lwIP. И чтоб всё это влезло в Shared RAM и место ещё осталось. Я в данный момент тоже делаю проект на L137 и тоже не собираюсь идти этим путём ;) Но собираюсь ограничиться максимум ОС на ARM (скорей всего - uCOS от Micrium - очень маленькое ядро - неск. килобайт всего, но есть всё что надо) или вообще без ОС (пока так). DSP будет заниматься только обработкой, из объектов синхронизации только прерывания DSP<->ARM (ещё не изучал этот вопрос). Никакой ОС на DSP не планирую, чтобы не тратить впустую его ресурсы. К сожалению по ТЗ ограничиться только внутренней ОЗУ не получится - необходимо собирать с McASP большой объём данных, обрабатывать, хранить и отдавать затем по медленному каналу. Насчёт "цифровых фильтров на DSP": Вы не смотрели на техасскую DSPLIB для этого ядра? Насколько она эффективна? По идее должна быть эффективнее, чем реализация фильтров на си. Хотя (вспоминая DSPLIB на C55) полного использования процессора ждать от неё не приходится. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sysel 0 4 ноября, 2011 Опубликовано 4 ноября, 2011 · Жалоба DSP будет заниматься только обработкой, из объектов синхронизации только прерывания DSP<->ARM (ещё не изучал этот вопрос). Никакой ОС на DSP не планирую, чтобы не тратить впустую его ресурсы. У меня тоже планируется L137. Образцы уже получили. Сейчас плату проектируем. А пока тренируюсь на L138 (hawkboard). А насчет "отъедания" производительности операционной системой: этот порт FreeRTOS тратит на переключение задач 816 нс (на частоте 300 МГц). Т.е. немного. Насчёт "цифровых фильтров на DSP": Вы не смотрели на техасскую DSPLIB для этого ядра? Насколько она эффективна? По идее должна быть эффективнее, чем реализация фильтров на си. Хотя (вспоминая DSPLIB на C55) полного использования процессора ждать от неё не приходится. Планирую использование этой библиотеки. А насчет "цифровых фильтров на Си" - это я писал про то, что стоит досконально изучить архитектуру C674x, чтобы выжать максимум производительности, а не бросаться в кодирование и получить черт знает что. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mahagam 0 19 января, 2012 Опубликовано 19 января, 2012 · Жалоба можно узнать в каком состоянии порт сейчас? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sysel 0 20 января, 2012 Опубликовано 20 января, 2012 · Жалоба можно узнать в каком состоянии порт сейчас? Выявил и устранил несколько ошибок. Исправленны порт пока не публиковал. Пока работу приостановил, но скоро возобновлю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться