Ардуино это
Ход Гения.
Концепция создана для упрощения, но многим не понятно потому как они относятся к ней не как к отладочному модулю который уже собран и не надо ничего паять, а как к бытовому явлению известному как потреблядство которое вызвано желанием програмистов впихнуть невпихуемое.
В этом случае правило програмиста "уж лучше я пропью чем куплю контролер дороже", я это называю "все элекронщики совка алкаши" и это факт.
В плане аппаратного решения ардуино это модуль с контролером который при нехватке возможностей можно заменить более мощным модулем который будет совместим и по ногам и переписывать код будет не нужно.
Недостаток у этих модулей так же есть и его породила неграмотность програмистов их создававших. Ардуино создано програмистами, не радиоконструкторами.
Самое первое это невозможность подключить модуль ардуино к макетной плате.
Большой модуль ардуино имеет 2 ряда контактов которые сдвинуты на пол шага, в случае какого нибудь про мини также есть 2 контакта аппаратной i2c которые нельзя подключить никак кроме как проводками.
Создание устройства на модуле ардуино макетным монтажом невозможно, следовательно или полнейшие сопли или делать свою плату, но это уже не ардуино.
Вторая проблема ещё проще, не все ноги разведены. У вас не получится использовать ноги кварца при работе от встроенного генератора, часть ног также занята светодиодами.
Точек подключения к этим контактам нет, а пайка к ногам smd , нафик надо такую модульность.
Кроме того на платах с большими контролерами несколько ног вообще не идут дальше площадки самого МК, им просто не хватило места.
Мораль такова, нельзя использовать все ноги МК . Не хватает ног, городите регистры.
Цель ардуино была скорее упростить софт. Я не изучал AVR , но я изучал альтеровские плис и для меня было странным что ноги у контролеров поделены на группы называемые портами, а в этих группах они пронумерованы.
Получается что у одного контролера есть несколько ног с одним номером, но они находятся в разных портах, ничего подобного у альтеры нет, там просто есть нога у которой есть номер.
Подобная примудрость avr учит использовать порты математическим способом. Програмист берёт какойто порт из 8 ног и просто опрашивает их по порядку зацикливая функцию. На самом контролере эти ноги тоже расположены в большинстве случаев рядом. Но именно это упрощение для програмиста становится проблемой когда он переходит на stm и начинает материть понимая что весь его алгоритм для avr полное фуфло и как минимум создаст путаную плату.
В этом плане ардуино лишает этой фичи avr задав номера ног просто номером без всякой групировки. В какомто смысле это даже не плохо, ведь это лишает привычки к стилю пригодному только для avr.
Второе програмное отличие это исключение конфликтов. Сам код ардуино модулей такойже сишный и вполне оптимальный, но в нём заложены алгоритмы которые исключают не правильное использование команд при любых условиях.
Если ваш сишный код пишется под конкретное устройство, то в этом конкретном функционале он не сможет работать както не так, в крайнем случае вы напишете строчку чего делать нельзя.
Ну вот скажем деление на 0, в коде вашего прибора подобного даже теоретически случится не может, но в случае ардуино это не так. Каждый шаг продумывается так что если в коде будет ошибка он начнёт искать способ как её исключить, отсюда начинается раздувание кода , от которого можно избавится только написав кусок кода на голом си, но тогда от ардуино остаётся только список ног.
Подобный пример RepRap код полностью на си, но собирается в среде ардуино от которого там только заголовок.
И тут таже мораль, вы не сможете использовать всю память для вашей конструкции, часть будет занята мусором.
Третья проблема, паршивая среда разработки сама по себе.
Там есть подсветка но это пожалуй всё. Нет даже элементарной кнопки "собрать", вместо этого надо запоминать комбинацию из 3 клавиш раскиданых по всей клаве или лезть в многоуровневое меню. Естественно никаких авто вставок тоже нет.
Кроме того нельзя открыть файл который находится не в папке с тем же именем.
Из за того что проект состоит из одинаковых файлов и не имеет файла проекта, корневым файлом зачемто выбирается тот который с названием текущей папки, но на самом деле программе совершенно пофиг как и любым компиляторам какой файл главный в проекте.