Arduino: спасибо и прощай

Для Arduino должен обязательно наступить этот день…

Arduino — это отличная платформа для моделирования на основе микроконтроллера, имеющая много вариаций, с кучей проектов с открытым кодом, учебников, форумов и т.д. для начинающих. Используя простой IDE(Integrated Development Environment, Интегрированная среда разработки), код на основе C++, USB кабель и несколько пассивных компонентов, можно начать мигать светодиодом или обмениваться сообщениями с компьютером (с Mac тоже) за несколько минут, не имея каких-либо серьезных предварительных знаний в электронике.

Это прекрасный старт, но как долго можно работать с Arduino? Довольно долго, но до определенного момента, потому что в электронике, как и везде в жизни есть компромисс между простотой и производительностью. Время и необходимость принятия такого решения зависит только от вас.

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

Преимущества:
— Arduino IDE основан на AVRGCC. Изучение Arduino поможет вам изучить C++. Если вам не нравится конкретная высокоуровневая команда или библиотека для Arduino, вы почти всегда можете заменить её на аналогичную C++.
— Вы можете питать, программировать и обмениваться сообщениями с Arduino при помощи одного USB кабеля (или FTDI кабеля для некоторых клонов).
— Вы можете сделать простой проект за несколько минут, используя стандартные библиотеки, не вникая в них. Для считывания сигналов кнопок, вывода информации на семи сегментные или ЖК-дисплеи и управления двигателями для всего этого есть стандартные библиотеки.
— Последовательные и SPI интерфейсы связи сделаны превосходно.

Недостатки:
— Arduino IDE. Это самый худший редактор после notepad.exe. Когда-нибудь вы перейдете на более удобный сторонний редактор, но вам всё равно придется оставить IDE для прошивки. 
— Загрузчик. Чтобы закончить проект с применением Arduino, вам придется вручную прошить загрузчик в каждый новый микроконтроллер ATmega. Он занимает 2Кб памяти.
— Разнообразные варианты: в официальном модельном ряду есть варианты с памятью 30(32) Кб и
254(256)КБ. Что делать, если ваш код занимает, допустим, 42 КБ? Единственным решением является использование полу-совместимого клона Sanguino и др.
— Отсутствие простого способа изменения тактовой частоты. Модель 3,3В/8МГц может спокойно работать на частоте 12МГц!  
— digitalWrite() использует для выполнения  56 циклов (я измерял 400). По крайней мере, можно легко выяснить причину и переключиться на прямой доступ к порту (вторая вещь которая заменяется после IDE). Arduino не очень удобна для по время-зависимых приложений.  
— Вы не можете легко отключить стандартную библиотеку для последовательной аппаратной части, для того чтобы брать прерывания с TX и RX, независимо от того, запущена она или нет.
— При переполнении ISR таймера прерывание происходит каждые 16K тактов в фоновом режиме. Это сделано для функций millis() и micros(), даже когда они не используются.  
— Пустой проект Arduino занимает 466 байт на Arduino UNO  и 666 байт на Arduino Mega2560. Я не люблю лишние расходы и предупреждения при компиляции.  
— Также Arduino «скрывает» такие важные аспекты архитектуры микроконтроллеров как регистры, прерывания и таймеры. Изучайте их.

Настало то время, чтобы перейти к чистому AVRGCC?
Его плюсы и минусы:

Трудности:
— Необходимо переписать некоторые вещи в C++, в частности последовательную связь (возможно, это плюс Arduino). К счастью, есть много «изобретенных велосипедов», которыми мы можем пользоваться.  Использование других протоколов, например SPI гораздо проще.
— Узнайте, в какие библиотеки включены не скомпилированные команды, и добавьте их в cpp. Наиболее распространенными являются: avr/io.h, avr/interrupt.h, util/delay.h, stdio.h and string.h.
— тип данных byte  и boolean должны стать uint8_t и bool, байт  B00010001 должен  записываться как 0b00010001 и так далее. Вы найдете другие изменения, их мало.

Преимущества:
— Нужен другой, более ёмкий или мощный микроконтроллер?  Если вы берете микроконтроллер той же серии (MegaAVR) достаточно просто перекомпилировать код. Возможно, вам может потребоваться изменить некоторые регистры, имена прерываний, Makefile и фьюзы.
— Нужна другая частота? Смените кварц или используйте внутренний генератор просто изменив фьюзы и Makefile!
— Вы можете использовать любые IDE.
— Вы полностью контролируете код. Он выполняет всё, что вы написали. Ничего не делается скрыто от вас. У вас есть все возможности. Вы пишете более быстрый и эффективный код. Вы узнаете новое и двигаетесь вперед.

Также купите себе хороший логический анализатор. Можно сказать, что это глаза для слепого.