среда, 22 июня 2016 г.

Пять причин почему я не буду применять Arduino

Казалось бы, почему не использовать это чудо - платы Arduino? Просто, понятно, много библиотек...


Есть туча разных проектов (страйкбольных и не очень) ништяков под эту платформу. Но у меня есть целый ворох претензий к этой так называемой "платформе".

Но по-порядку.

1. Возможности плат

Имеется в виду аппаратное обеспечение. Почти все ардуины построены на базе 8-битных микроконтроллеров Atmel AVR серии Mega. 

Нет вопросов, это замечательные микроконтроллеры, на ATmega и ATtiny можно построить множество достаточно серьезных систем, в микроконтроллерах есть куча интерфейсов, таймеры и прочие ништяки. Главное, что написанный даже на C или C++ код легко переносится между разными микроконтроллерами (в отличие от тех же PIC, где идёт жесткая завязка на возможности конкретной серии).

Но всё-таки эти МК безнадёжно устарели. Возьмем распространенный, почти что "старший", ATmega328 и посмотрим на его параметры: разрядность процессора 8-бит и частота аж до 20 МГц, объем ОЗУ 2 килобайта, флэш-память 32 килобайта и 1 килобайт ПЗУ. Для программирования на ассемблере или С на низком уровне - это крайне много. 

Китайские клоны ардуин под это дело крайне дешевы, за 120р можно взять клон Arduino Pro Mini с этим процом, с тактовой в 16МГц.

А теперь сравним с самым дешевеньким (в исполнении в виде платы) STM32F103C8, который распаяный на плате, с гребенками и USB разъемом можно купить от 250р: проц 32-бита, тактовая 72МГц, ОЗУ 20 килобайт, флэш-память 64 килобайта, часы реального времени на борту, умеет USB....

Ненамного дороже есть STM32F103CB, у которого 128 килобайт флэша. Как-то вот не очень интересно после такого смотреть в сторону этих самых ардуин...

Не отрицаю, есть еще Arduino Mega 2560, вроде как крутотень с USB, кучей выводов, но цена сразу 500р/шт.

Или попытка "вдохнуть новую жизнь в задницу Arduino" - перевод на платформу ARM - Arduino Zero. Неплохой по возможностям 32-битный вариант. Но китайцы еще не содрали, а ценник в 40+ евро как-то слегка отпугивает....

Но не процессором единым ограничиваются мои претензии. Идём дальше.


2. Использование возможностей микропроцессора

При написании программы на C или ассемблере (да и на C++ по большей части) у программиста есть контроль над всей аппаратной частью. Были бы даташиты на эту часть.

В ардуино упор сделан на простоту разработки для неискушенного пользователя. То есть аппаратная часть по боку. Однако, классы самого ардуино не позволяют использовать аппаратуру на всю катушку. Как результат, надо общаться с аппаратурой напрямки.

Возникает вопрос: а нахрена тогда ардуина нужна? Ответ будет в выводах, пока что моя претензия - неполное использование аппаратуры, плюс при вставках прямого доступа к регистрам микроконтроллера мы отхватываем проблемы при переносе кода с одной платы на другую (тот же таймер у ATmega16 и ATmega32 немного по-разному инициализируется).


3. Расширяемость проекта

С одной стороны тут кругом плюсы - куча библиотек, валом разных плат. Но, на мой извращенный взгляд, при написании какого-либо проекта с потенциалом развития мы очень быстро упрёмся в пределы возможностей платформы.

Первое - объем ОЗУ. Второе - производительность процессора. Переход на старшие платы с ядром ARM вполне выход, но ценник неприятен.

В случае же разработки под ARM (те же STM32F103) всегда можно перейти к более серьезному камню. Так, от 103 можно перейти к STM32F407ZE с полумегабайтным флешем, 192 килобайтами оперативы, 168 МГц тактовой и кучей всяких аппаратных интерфейсов, таймеров и главное - аппаратной работой с вещественными числами. При этом платы начинаются от 1350р (19 евро).


4. Претензии к среде разработки


Arduino IDE это просто песня. По современным меркам это издевательство: полное отсутствие всяких автодополнений, рефакторинга и прочих сильно упрощающих жизнь разработчику ништяков.

Даже SublimeText намного удобнее. Не говоря о взрослых IDE типа Qt Creator, CoIDE и Visual Studio.

Даже язык программирования используется какой-то ущербный. Я понимаю, что это сделано для снижения порога вхождения для программистов. Но всё же под ARM можно писать на полнофункциональном C++ и в нормальной среде (тот же Qt Creator).

5. Средства отладки

Собственно, тут я полностью неправ, признаю. Откуда взяться претензии к тому, чего нет и в помине.

Теоретически, на старших ATmega есть отладочный порт. На старших платах микроконтроллер на ядре ARM имеет шикарный аппаратный отладчик в ядре.
Но в IDE возможности тормознуть и поглядеть состояние переменных/счетчиков и прочего банально НЕТ.

Это нужно не всегда, почти что всегда это можно заменить какими-нибудь выводами или прочим, но в 20% случаев пошаговая отладка на реальном железе позволяет здорово упростить жизнь...

Выводы

Признаюсь, платы Arduino я применял неоднократно. В основном это были клоны Arduino Pro Mini с контроллерами ATmega168 или ATmega328. Их плюсы - малый размер, готовая обвязка, но при этом не все выводы МК подключены к гребёнкам. Но в целом можно было смириться и применять.

Родное ПО Arduino я применял два раза. Один раз - пытался разобраться, почему переписанный под чистый C код библиотеки от ардуино не работает, второй - заливал прошивку в считыватель RFID. Оба раза IDE оставило гнетущее впечатление. Правда, почти такое же как "промышленный гигант" Keil или еще более страшный IAR. 

Но! Эти платки - идеальный вариант для мелких проектов на чистом С или С++. Дешево и достаточно сердито. Берём любой компилятор для AVR, прикручиваем его к Sublime и счастье.

Однако, познакомившись со связкой STM32 + MBED + Qt Creator с их полнофункциональным C++, библиотеками доступа к куче разных аппаратных хреновин, отладкой и прочими возможностями я не вернусь к Arduino. Мелкий проект под STM32F103C8 занимает во флэше 20 килобайт, так что оставшихся 40+ вполне хватит для всяких извращений.

Собственно, об этом в следующий раз.