Проект может быть и серьезный, только подход к его реализации состоит из сплошных прихотей. Между серьезностью задачи и беспонтовой реализацией нет никакой связи. Проблема "лишь бы работало" заключается в том, что в определенный момент проект упирается в необходимость ВСЕ ПЕРЕДЕЛАТЬ, патамушта бестолковая реализация становится фатально нереализуемой на целесообразной матчасти. Все что возможно делать НЕ ТАК - Вы делаете. И где тут ночевала серьезность?
Последний раз редактировалось КРАМ Чт сен 03, 2020 22:21:06, всего редактировалось 1 раз.
КРАМ, всё уже работает как надо, проект закончен и реализован успешно. Дальше уже моё баловство, можно и побузить:) А не замахнуться ли нам на преобразования Фурье, можно пока не быстрые! Вы готовы помогать конструктивно?
А не замахнуться ли нам на преобразования Фурье, можно пока не быстрые! Вы готовы помогать конструктивно?
Помогать то я могу, только проку с Вашим подходом никакого не будет. Вы в курсе, что для использования в коде DSP инструкций процессора (ЛЮБОГО процессора), нужно писать этот самый код на АСМе? Ну или использовать библиотеку, которая так же написана на АСМе. Чтобы грамотно работать с сигналами, нужно понимать теорию того, что Вы делаете. Что Вы знаете об FFT или DFT, кроме самой этой аббревиатуры?
Я иногда собеседую кандидатов на работу. Ваши сентенции тут не дали бы Вам ни единого шанса, если бы Вы претендовали на обсуждаемую тут тематику. Серьезные проекты не пишут на Васиках. Из чего следует, что к "серьезному проекту", даже если он существует, лично Вы отношения не имеете.
КРАМ, по-моему, имеет два высших образования: одно по электронике, второе по медицине. Или он монах, постигший высшую Суть, не знаю. Ничем другим я для себя не могу объяснить такое спокойное и методичное исследование патологического образа мышления, которым отличается ТС. Хотя... Может, просто тренируется на котиках. Завидую и преклоняюсь перед его терпением!
По прерыванию от таймера. В котором ждете пока АПЦ оцифрует, а это время. Настройте периферию так чтобы таймер запускал АПЦ и в прерывании от которого забираете данные из регистра ADC1->DR. А еще лучше чтобы данные из АЦП забирал модуль DMA. Это уменьшит необходимое число прерываний, а значит увеличит достижимую частоту оцифровки, т. к. на вход и выход из прерывания нужно по 12 тактов.
linkov1959 писал(а):
MikroElektronika имеет лучшие компиляторы на Си, бейсик и паскаль!
Признавайтесь сколько вам заплатила микроэлектроника за рекламу их продукта? Эти компиляторы далеко не лучшие если их сравнить например с GCC, они существенно проигрывают в размере прошивки и скорости работы.
linkov1959 писал(а):
Да пофиг на события и прерывания, лишь бы работало!
Это не правильный подход к разработке. Обычно применяется большинством ардуинщиков и другими быдлокодерами. Как правило качество кода и надежность работы близки к нулю и вероятность ошибки в работе устройства велика. Если проект серьезный, нужно писать так чтобы гарантировано работало без сбоев в любых ситуациях включая нестандартные режимы работы.
Я не в курсе про "смотря что", но под DSP инструкциями называют MAC-инструкции и их разновидности. Это конвейерная операция вида Acc=Acc+X*Y с предвыборками операндов, поскольку шина одна, а операндов два, а исполняется инструкция за 1 машинный цикл при конвейере типовой для данной архитектуры длины. Таким образом, этот класс инструкций не может быть использован компилятором из-за своего ненативного механизма работы.
Я не в курсе про "смотря что", но под DSP инструкциями называют MAC-инструкции и их разновидности. Это конвейерная операция вида Acc=Acc+X*Y с предвыборками операндов
Как видно - IAR вполне себе успешно использует MAC-инструкции. И, если приглядеться, таковых в типичном листинге - множество. Конечно "предыборок операндов" здесь нет, но это - ограничения ARM-архитектуры, в которой в принципе отсутствуют вычислительные команды обращающиеся к памяти.
Но если взять CPU с соответствующей архитектурой (полноценный DSP), так там современные компиляторы вполне себе успешно используют MAC-инструкции с выборками из памяти. Хотя впрочем тут ещё вопрос: Что в полноценном DSP называть "DSP-инструкцией", а что - нет? Потому я и писал "Это смотря что называть "DSP-инструкциями"...
Мурик, Спасибо за конструктив. Самому приходила идея одновременной работы АЦП и вычислений, но когда обнаружил возможность значительно сократить выборку АЦП, это стало не актуально. Вычисления float тормозят на 90%. Сейчас думаю, как обойти, завтра буду пробовать на целых.
Добавлено after 14 minutes 58 seconds: MikroElektronika новый проект выдала, NECTO. Что за зверь? Пригодится новичкам?
Вы в курсе, что для использования в коде DSP инструкций процессора (ЛЮБОГО процессора), нужно писать этот самый код на АСМе? Ну или использовать библиотеку, которая так же написана на АСМе.
Но если взять CPU с соответствующей архитектурой (полноценный DSP), так там современные компиляторы вполне себе успешно используют MAC-инструкции с выборками из памяти....
Нет. Не используют. Там точно так же БИБЛИОТЕЧНЫЕ функции написаны на АСМе. Заставить компилятор преобразовать некую строку на Си:
Что в полноценном DSP называть "DSP-инструкцией", а что - нет?...
А чем "полноценный" DSP отличается от "неполноценного"? Да по сути ничем.Ну если не считать в особо мощных процессорах возможности параллельного выполнения единой группы инструкций над массивом операндов (комплексные многомерные вычисления)... Таким образом, те же самые MAC инструкции в ЛЮБОМ DSP процессоре и называются DSP, в отличии от обычной арифметики общего применения.
Самому приходила идея одновременной работы АЦП и вычислений
Ну если не ждать в пустом цикле результата преобразования и лишь потом считать фильтр, то вычисления ПО ЛЮБОМУ будут происходить одновременно с преобразованием с той лишь разницей, что при запуске АЦП в прерывании от таймера ко времени вычислений добавится время обработки этого прерывания. Это максимум 20 машинных циклов. Запуск преобразования по событиям от таймера ДЛЯ ВАШЕГО СЛУЧАЯ не столько увеличивает скорость, сколько упрощает код.
Ну значит 40 или около того. При тактовой под 100 МГц (цикл 10 нс) и имеющихся у ТС вводных это совершенно не принципиально. Но даже в таком случае лучше делать красиво. То есть подключить таймер к АЦП. Но ДМА по любому тут не канает. Если бы хотя бы фильтр был двухкаскадный с децимацией, то тогда ДМА бы пригодился.
Нет. Не используют. Там точно так же БИБЛИОТЕЧНЫЕ функции написаны на АСМе.
Т.е. как видно - Вы никогда не имели дел с DSP. Зачем тогда говорить о том, чего не знаете? Тот же CCS уже лет 10 точно умеет генерить код довольно плотно использующий ядро. Причём с распараллеливанием инструкций. А MAC-инструкции он вообще имхо всегда умел генерить.
А чем "полноценный" DSP отличается от "неполноценного"? Да по сути ничем.
Самое главное отличие полноценного DSP от DSP-набора инстркций ARM: Возможность выполнения операций доступа к памяти одновременно с операциями на АЛУ. Это не считая: распараллеливания инструкций, аппартных циклов, циклической адресации, "насыщающей" арифметики и т.п.
Причем тут распараллеливание? Я привел конкретный пример. Каким образом компилятор ОБЫЧНУЮ арифметику интерпретирует в конвейерные РЕГИСТРОВЫЕ команды? Чтобы было понятно. Имеем стандартную MAC-команду, которая суммирует результат умножения двух 32 разрядных РОНов с содержимым аккумулятора, который по сути так же является РОНом, но с разрядностью, например 80. При этом еще и имеется специальным образом настраиваемая сатурация оного аккумулятора. Одновременно с этим происходит подгрузка РОНов-операндов по РОНам-указателям из ОЗУ. А так же инкремент указателей. Это МАС команда, а не простое умножение с накоплением. Какое все это имеет отношение к Си? Покажите Си-строку, которая будет скомпилирована в MAC. ЗЫ. Если уменьшить разрядность операндов до 16, а аккумулятора до 40 - это будет DSP ядро dsPIC33. Скалярный FIR на этом МК будет из себя представлять четыре строки на АСМе: 1. Сброс аккумулятора с предзагрузкой 2. Команда repeat 3. MAC-инструкция 4. нормализация результата и выгрузка Все. Никаких пересылок и инкрементов. Все внутри одной команды, которая повторяется число тапов раз.
Это МАС команда, а не простое умножение с накоплением.
MAC - это и есть умножение с накоплением. Откройте хотя-бы википедию: https://en.wikipedia.org/wiki/Multiply–accumulate_operation Или любой другой учебник.
Одновременно с этим происходит подгрузка РОНов-операндов по РОНам-указателям из ОЗУ.
Приведите пример хотя бы одной такой команды в системе команд ARM! Пример в студию!!! Нет таких команд в ARM! И как позвольте спросить компилятор сможет сгенерить несуществующую команду???
PS: В ARM есть MAC-команды. Но нет команд выполняющих одновременно АЛУ-операцию с доступом к памяти. Это - ограничение архитектуры ядра. Компилятор тут не при чём. Я уже дважды писал об этом.
В ARM есть MAC-команды. Но нет команд выполняющих одновременно АЛУ-операцию с доступом к памяти. Я уже дважды писал об этом.
Это не DSP МАС. Я не знаком с ASMом ARM-в, но в курсе, что есть недоMAC инструкции, которые, как я теперь вижу, даже аббревиатуру MAC не имеют. Таким образом, построить на их основе фильтр или бабочку FFT, мягко говоря, невозможно. А речь вообще то была об этом. Но Вы намекнули, я так понимаю, на архитектуру DSP Аналог девайса и ТИ. Расскажите как там Си интерпретируется в DSP MAC? ЗЫ. Как теперь выяснилось, dsPIC33 - это trueDSP...
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения