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.
- Вы полностью контролируете код. Он выполняет всё, что вы написали. Ничего не делается скрыто от вас. У вас есть все возможности. Вы пишете более быстрый и эффективный код. Вы узнаете новое и двигаетесь вперед.
Также купите себе хороший логический анализатор. Можно сказать, что это глаза для слепого.
Оригинал статьи на английском языке (перевод: Александр Касьянов для сайта cxem.net)
Железо можно взять микродуиновское, но писать лучше все же на Си, ИМХО.