Скажите, а с ARM все действительно так плохо?

В одном прожекте возникла необходимость беспроводной передачи неприличного количества данных с АЦП. Даже в самых оптимистичных сценариях получалось, что придется гнать без проводов поток данных порядка 150 кбит/с. Немного? Но при таком потоке «затыкаются» все легкодоступные радиоудлинители UART — неважно, какой там у них радиоинтерфейс — WiFi, Bluetooth, или что-то еще. Более того, большинству из них недоступна скорость выше 115200 бод, что «отсекает» их еще на этапе ознакомления с ТТХ.

В поисках какого-то более подходящего решения набрел на микроконтролер CC3200 производства Texas Instruments. Что мне понравилось? По пунктам:

— ядро Cortex-M4 (хотелось бы, конечно, Cortex-M4F, но и это сойдет);
— встроенный WiFi, по отзывам — действительно быстрый;
— встроенные раздельные модули SPI и SD-host (я сначала думал, изучая примеры, что обмен с SD-картой будет идти с использованием модуля SPI, судя по назначению выводов — но нет, они там никак не связаны);
— возможность переназначать выводы утилитой Pinmux — хочешь, заводи SD-карту на эту сторону микрухи, хочешь — на другую, в общем, все офигенно.

Ну, где у нас АЦП — там хорошо бы и обработать сигнал? Благо в ядре Cortex-M4, в отличие от распространенного Cortex-M3, присутствуют команды, упрощающие цифровую обработку сигналов — например, реализацию всевозможных цифровых фильтров. Но на этом этапе начались какие-то дикие танцы с бубнами :)

Для начала — есть библиотека CMSIS, унифицированная для всех ARM реализация некоторых часто используемых функций. Особенно мне была интересна CMSIS-DSP, часть библиотеки с реализацией функций для цифровой обработки сигнала. Да, я могу написать реализацию какого-нибудь там фильтра Баттерворта или быстрого преобразования Фурье — но оптимизировать его для ARM я вряд ли буду, да и зачем это делать, когда есть готовое общепринятое решение?

Но для использования этого готового решения требуется некоторая поддержка от производителя микроконтролера — и здесь все становится просто ужасно. У Texas Instruments используется своя среда разработки (на основе Eclipse) и свой же компилятор. Может, имей я больше опыта программирования под ARM, я бы настроил что-то более распространенное, но для начала я просто следовал пунктам из Quick Start Guide.

Так вот, основное преимущество Cortex-M4 над Cortex-M3 — поддержка «DSP instruction set» — вообще никак не афишируется производителем в случае CC3200. Да, есть «патч» для одной из относительно старых версий CMSIS, выпущенный Texas Instruments несколько лет назад — но применимость его в случае CC3200 не озвучивается (и действительно, если «втупую» применить этот «патч», ничего не выйдет). На просторах ютуба нашлось вот такое видео:

Через 15 секунд просмотра уже хочется восславить Кришну, а через минуту так и ждешь, что все начнут петь и плясать. Если серьезно — пахнет индусятиной в худшем смысле этого слова. Из озвученных в видео шагов один — фундаментально неправильный, а еще нескольким я не смог найти внятного объяснения.

В конечном итоге CMSIS-DSP я собрал (откомпилированная библиотека из дистрибутива с компилятором TI не очень дружит) — хотя, конечно, некоторые вопросы остались. И главный из них — в заголовке. Неужели любой шаг в сторону от любовно подобранных примеров из SDK превращается в вот такой забег по граблям под руководством индусов?

Скажите, а с ARM все действительно так плохо?: 4 комментария

  1. Увы это так. А если охота использовать стандартные либы — флаг в руки, от тамошнего кода глаза иногда начинают кровоточить (бесконечный loop — как нефиг делать в туевой хуче мест), хотя не так как от ардуин-дураин всяких(от этих у меня начинает в мозгу крутиться фраза «окей гугель, где купить огнемёт и адресный справочник авторов дефолтной библиотеки»).
    П.С. А как бывает замечательно, когда среда воон того разработчика не хочет жить с имеющимся jtag-ом….

  2. Нет, не так. Это особенность TI, из-за которой я не использую их чипы. Хотя и к ним, наверное, есть сторонний компилятор и библиотеки. Кстати, и для ST тоже избегаю CMSIS в пользу ChibiOS. Но я никак не работаю с DSP

Добавить комментарий для Шура Люберецкий Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *