Скажите, а с 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 превращается в вот такой забег по граблям под руководством индусов?

4 комментария

  1. GetinakS пишет:

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

  2. Сергей пишет:

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

    • CMSIS “вообще” мне показалась иллюстрацией вот к этому комиксу:

      http://xkcd.com/927/

      А вот CMSIS-DSP вроде ничего – хотя, конечно, надо ее поисследовать на предмет багов (я там уже нашел кое-какие странности).