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