“Старички” - это люди с большим опытом использования юникс-систем и разработки под них. То есть - мы.

МИКРОКОНТРОЛЛЕРЫ

Мы все, так или иначе, сталкивались с разработкой под микроконтроллеры. Какие для этого есть классические инструменты? Например, для платформы Atmel - если мы разрабатываем из-под Linux, то инструменты все те же, которые используются для разработки под сам Linux! У нас есть avr-gcc, есть тот же самый GNU Make, плюс к этому нужна программа, которая будет работать с программатором и записывать прошивку в микроконтроллер. В Linux это консольная утилита, конечно же. Например, avrdude.

При помощи этого набора консольных (!) утилит писались проекты, в любом редакторе, в любом IDE. Это было очень удобно, эффективно и красиво.

Но! Мы немного забыли о том, что все это, и использование Linux в первую очередь, сильно имеет крен в сторону профессиональной разработки. Сложно представить какого-нибудь любителя-дачника, который хочет сделать автоматическую поливалку парника, и ради этого начинает учить bash и GNU Make. Естественно, он использует Windows, и там несколько другие подходы. В Windows весьма неудобно работать с набором консольных утилит, да это и не принято, поэтому там мы ставим один такой монстро-GUI-бандл всего, под названием IDE. Вместо божественного Vim! И этот бандл, он как бы, ест ресурсы! И куда менее удобен чем Vim, в качестве редактора кода. Вот этот момент сразу запомним - в Linux у нас упор на консольные утилиты, в Windows нам нужна цельная GUI среда которая делает все. И эта среда будет жирная.

Но есть в embedded сфере еще более серьезная проблема. Вот допустим, вы написали код поливалки парника для Atmega8. А я решил его использовать тоже, но у меня STM32F407. Куда мне засунуть ваш код? То есть - решения получаются непортируемы между разными микроконтроллерами. Даже в пределах одной платформы! А основной принцип программирования нам что говорит - надо переиспользовать код!

И вот тогда, некоторые умные люди взяли и сделали такую штуку как

ARDUINO

Как понять, что это такое? Тут надо немного пошевелить мозгами. Это не совсем то, чем оно кажется с первого взгляда. Вы считаете, что Arduino - это вот такая отладочная платка, UNO, с микроконтроллером AVR на ней? Да, в том числе и она, но смысл то вообще не в этом! Посмотрите как выглядит Arduino UNO - там есть гребенка с пинами GPIO (дискретные входы-выходы), есть гребенка с аналоговыми ножками (входами АЦП), есть ножки UART, SPI, I2C. И (!!!) их расположение на плате - это стандарт! Это де-факто стандарт всей этой сферы. А дальше, есть море всех вот этих плат расширения к Arduino, которые просто втыкаются в эти СТАНДАРТНЫЕ гребенки!

С программной стороны, что это такое? Платформа Arduino - это набор C++ библиотек, предоставляющий СТАНДАРТНЫЙ АБСТРАГИРОВАННЫЙ ОТ РЕГИСТРОВ API для работы с вот этими вот СТАНДАРТНЫМИ ножками Arduino!

А теперь - фокус-покус! Зачем все это нужно нам? Представьте теперь, что я не хочу микроконтроллер Atmega328, а хочу STM32F411, который на порядок круче. Но - при этом я хочу втыкать в него все эти мириады плат расширения, которые понаделали для Arduino. И я хочу брать драйверы для всех этих плат, которые УЖЕ написали для Arduino. Удобно же? Но как это возможно? Микроконтроллер вообще другой!

И вот тут, еще более умные люди, чем те, кто придумал Arduino изначально (а может и они сами, я не вникал), посмотрели внимательно на платформу Arduino и на ее СТАНДАРТ. Ножки, которые есть на гребенках Arduino UNO, есть на всех микроконтроллерах всех платформ! Они есть везде, если это не восьмипиновое чудо, конечно. Но и для него есть варианты.

API платформы Arduino это что? Смотри выше. СТАНДАРТНЫЙ АБСТРАГИРОВАННЫЙ ОТ РЕГИСТРОВ API. Значит, все это может работать на любой аппаратной платформе! Нужно только перенести библиотеки Arduino, реализующие все это, на любую целевую платформу. А дальше, любая программа на C++, которой достаточно вот этого базового СТАНДАРТА, начинает работать на любом микроконтроллере вообще! У нас наконец-то, один и тот же код начинает переноситься между микроконтроллерами. Наступает светлое коммунистическое будущее.

КАК ТЕПЕРЬ ПОНЯТЬ ARDUINO

То есть, современное Arduino - это программная платформа, которая реализует базовый АБСТРАГИРОВАННЫЙ ОТ РЕГИСТРОВ API для всех основных платформ микроконтроллеров. Сюда входит AVR, STM32, ESP32, Raspberry Pi Pico, еще куча всего, в том числе одноплатники с Linux внутри! Да да, смеющиеся над ардуинкой, попуститесь! Эти скетчи, компилируются и работают как приложение линукса. Если у вас такая платформа.

И где-то на задворках всего этого многообразия, есть та самая Arduino UNO с атмегой. Если вы хотите именно ее, то пожалуйста.

А есть, например, такая плата как Nucleo-64. На ней стоит мощный современный микроконтроллер STM32F411, но гребенки… вот сюрприз! Они такие же точно, как у Arduino UNO! То есть все ардуиновские платы расширения втыкаются в нее как в родную.

А ЕСЛИ МНЕ ЭТОГО МАЛО???

И вот он самый главный вопрос человека, знакомящегося с Arduino после 20-летнего опыта хардкор-разработки на регистрах. А если мне мало этого вашего БАЗОВОГО API? Что если мне на STM32F411 надо настроить 6 каналов АЦП в режиме циклического DMA, с запуском преобразования от таймера TIM2, и с периодической вставкой еще 3 инжектированных каналов в этот регулярный набор? ХДЕ В ВАШЕЙ АБДУРИНО ПЛАТФОРМЕ ФУНКЦИЯ КОТОРАЯ ЭТО ДЕЛАЕТ? А? А? А? Как мне через analogRead ардуиновский сделать ВОТ ЭТО?

А никак. Тут нужно понять ключевую, важнейшую вещь! Платформа Arduino работает ПОВЕРХ нативной платформы! Не ВМЕСТО нее, а именно ПОВЕРХ! То есть, функции Arduino внутри себя дергают функции нативной платформы, или регистры, проще говоря. Для STM32 это HAL, для ESP32 это ESP-IDF, и так далее. Для AVR это просто регистры AVR.

То есть, ВСЕ возможности, все функции, все регистры нативной платформы, доступны вам ВМЕСТЕ с API Arduino! Натив никуда не девается! Вы можете прямо в Arduino IDE, прямо в скетче ардуиновском, обратиться к любому регистру, или к любой функции нижележащей платформы! Вы можете ВООБЩЕ не использовать API Arduino в скетче, только натив! Вот это надо ОЧЕНЬ ЧЕТКО ПОНЯТЬ. Если вам не понятно, как продраться через абстракции Arduino, значит просто в этих абстракциях нужных нюансов нет, потому что они платформо-специфичны, а Arduino - это кроссплатформа между микроконтроллерами! Тогда, вы просто берете и напрямую обращаетесь к возможностям нативной платформы. К любым.

Но - если все так хорошо, почему все так плохо? Почему все так хейтят Arduino? Потому что - Arduino IDE. Это фуфло, очень неудачная IDE. И очень жирная. Она все портит, рушит всю красоту. Что же тогда делать? Вспоминаем теперь, что мы на Linux, и у нас - крен в сторону консольных утилит! То есть, мы должны выбросить неудачную IDE, и работать с консольными утилитами, как мы и привыкли.

И, внимание!!! Не обязательно выбрасывать саму платформу Arduino и фигачить на регистрах через avrdude в эти платы, как обычно все деды предлагают! Выборосить надо только IDE. С остальным уже можно работать и извлекать пользу.

На этом закончим с философией, в Части 2 поговорим о практике эффективного применения этой платформы юникс-ветераном.

  • JamesHoldenOP
    link
    fedilink
    arrow-up
    0
    ·
    2 years ago

    Да причем тут LinuxCNC, тут речь о микроконтроллерах, а не управлении с компа или одноплатника.

    • torvn77
      link
      fedilink
      arrow-up
      0
      ·
      2 years ago

      Лучше разбери как на ардуине сделать электроэразионную дрель или нагреватель ВЧ токами, а так же mppt контроллер умеющий паралельно соединятся с своими собратьями.

      • JamesHoldenOP
        link
        fedilink
        arrow-up
        0
        ·
        2 years ago

        Я не занимался электроэрозионными, могу разобрать про обычную дрель, со стабилизацией скорости.

      • Oberstserj
        link
        fedilink
        arrow-up
        0
        ·
        2 years ago

        Торвн, ты опять в какой-то параллельной вселенной. Тут обучалка про контроллеры, азы и основы, а ты про какие-то печи рассуждаешь.

        • torvn77
          link
          fedilink
          arrow-up
          0
          ·
          2 years ago

          Я говорю о том, что может быть интересно реальному рукастому человеку, это:

          1. Солнечные электростанции.
          2. Электроэрозионная дрель.
          3. Индукционная плавильня.
          4. Сборка собственного кондиционера.

          А базовое мигание светодиодом или двигание моторчика заинтересует разве что только изготовителей стендов и наружной рекламы, но и то надо им это раз в несколько лет.

          • Oberstserj
            link
            fedilink
            arrow-up
            0
            ·
            2 years ago

            Блять. Ща. Выдохнул.

            Торвн. Ты это, маленьким был? Срал мимо горшка? Мел в школе ел? Или, сука, собрал кондиционер по принципу Майсюченко, работающий от солнечной электростанции, которую ты электроэрозионной дрелью в индукционной печи выплавил на уроке труда, пока девочки пироги за стенкой пекли?

            ЭТО, БЛЯТЬ, ОБУЧАЛКА ДЛЯ НАЧИНАЮЩИХ.

            Глаза продери уже наконец.

            • torvn77
              link
              fedilink
              arrow-up
              0
              ·
              2 years ago

              ЭТО, БЛЯТЬ, ОБУЧАЛКА ДЛЯ НАЧИНАЮЩИХ.

              Тем не менее обучалка должна позволять делать полезные вещи, а не кучу сомнительной хрени.

              Возьмём например linuxcnc, при этом я надеюсь что ты перед своими бравурными ответами его хорошо изучишь и будешь отвечать зная предмет.

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

              При этом эти автоматы могут управлять переыерией как через LPT порт, так и при вдожении больших денежных средств в платы расширения и через контроллеры с большим количеством GPIO.

              Так вот, "детский", обучающий вариант это не требующая больших вложений работа через LPT порт, а работа через контроллеры это уже "взрослое" использование системы, при этом даже обучающий вариант может быть использован для построения рабочих систем.
              С моей точки зрения именно такой и должна быть разница между обучающей и рабочей системой.

              А учить систему которая заведомо ничего не может создать кроме хренотени имхо безполезно и не интересно.

              • JamesHoldenOP
                link
                fedilink
                arrow-up
                0
                ·
                2 years ago

                А если я тебе скину фото моего ноутбука, ты обведешь на них LPT порт? А то я что-то найти не могу

                • torvn77
                  link
                  fedilink
                  arrow-up
                  0
                  ·
                  2 years ago

                  На ноутбуках его не ставят, он есть только на atx и matx материнках, в данный момент как правило в виде гребёнки.

              • Oberstserj
                link
                fedilink
                arrow-up
                0
                ·
                2 years ago

                Возьмём например linuxcnc, при этом я надеюсь что ты перед своими бравурными ответами его хорошо изучишь и будешь отвечать зная предмет.

                Да хоспаде ж…ты так говоришь, будто это какое-то секретное знание. Я в курсе, у меня даже обучалка в CNC-Club по нему написала.

                Раз так рдеешь за такой подход, напиши статьи. Нам как раз надо немного разбавить местное болото, а то кроме как в клуб сюда заходить смысла нет.

            • bo4ok
              link
              fedilink
              arrow-up
              0
              ·
              2 years ago

              «ЭТО, БЛЯТЬ, ОБУЧАЛКА ДЛЯ НАЧИНАЮЩИХ.» Это не обучалка, это очередное я-прочитал-википедию копирайтерство, оправдывающее свой низкий уровень якобы нацеленностью на начинающих. Таких полон интернет, слава Бже, что дальше “первой части” они обычно не движутся.

              • Oberstserj
                link
                fedilink
                arrow-up
                0
                ·
                2 years ago

                Высрался? Пройди теперь мимо нахер.