Привет Гиктаймс!!! Новогодние праздники подходят к концу, все салаты съедены, шампанское выпито, и жизнь потихоньку начинает возвращаться в привычное русло. И это хорошо. Но речь совсем не об этом.

Дело, собственно, вот в чем: многие из нас, начиная свой путь программирования микроконтроллеров с платы Arduino, подходили наконец к такому моменту,
когда в родной среде Arduino IDE становилось тесновато, а крутые среды разработки типа Atmel Studio, Keil, Microsoft VS пугали обилием настроек и инструментов.

Мне, например, очень удобно работать с механизмом вкладок Arduino IDE, разрабатывая большие проекты, это чисто мое предпочтение — на самом деле очень много времени занимает перенос кода, функций и переменных в заголовочные файлы и классы. Но на самом деле, есть более весомые аргументы в пользу перехода от Arduino IDE к более серьезным инструментам разработки. Это в первую очередь, наличие отладчика. Для начинающих программистов микроконтроллеров это кажется несущественным, но когда время идет, и сложность программ увеличивается, увеличиваются и требования к работоспособности и функционалу кода МК. И тут как раз возникает необходимость понимать, и видеть, как работает твой код на микроконтроллере. Даже если ты не обзавелся каким нибудь jtag — девайсом, очень приятно наблюдать даже в симуляторе, как нужные значения падают в нужные регистры во время работы программы. Ну и конечно же, если вы всерьез решили изучить программирование микроконтроллеров и архитектуру AVR — то без дебаггера просто никак не обойтись. Я уже молчу про скрытую работу wiring — препроцессора Arduino IDE, который позволяет писать более простые программы, используя функционал библиотек Arduino, и который добавляет в программу очень много мусора, который занимает память программ контроллера, и использует вхолостую ресурсы МК. Также немаловажным фактором является скромность редактора исходного кода среды Arduino IDE. И как водиться в миру, настоящие хардкорные разработчики встраиваемых систем и автоматики пишут только на си и ассемблере, полагаясь на собственный интеллект и опыт, а не на разработки итальянских студентов (против которых ничего плохого не имею, и камней в их огород бросать не буду).

Если вы согласны с вышесказанным — значит вы уже пробовали, или только собираетесь установить и использовать Atmel Studio 7. Я сам программист начинающий, можно сказать, программирование учил очень давно в школе, это был интерпретируемый Бейсик на машинах MSX. И лишь только пару лет назад пришлось, как говорится, по долгу службы приступить к изучению и освоению си и с++. Поэтому с небольшой высоты колокольни собственного опыта, хочу порекомендовать AVR Studio, а именно Atmel Studio 7. На самом деле, эта среда доставила мне достаточно нервотрепки с ее установкой и запуском («окна» я использую исключительно для работы и потехи, причем это Win 7 SP1 64), было несколько попыток установить ее с разбегу, но это заканчивалось фэйлом, пока на чистую систему я не установил обновление «Windows6.1-KB3033929-x64.msu», после чего все таки мои старания были вознаграждены, и среда запустилась. После было много сказано отнюдь не литературных слов и выражений, пока среда не стала более менее адекватно работать (Atmel Studio 7 у меня жутко тормозила поначалу, на машине с хорошим Core i7 и 8 гигами шустрой ОЗУ DDR4, не пойму, что стало потом, то ли среда каким то мистическим образом прокэшировалась в системе, или же я привык, но сейчас все неплохо работает). Также я хочу подметить, что эта среда так или иначе разработана и выпущена разработчиками AVR и ARM контроллеров Atmel, и посему поддерживает все свои контроллеры, и предоставляет все необходимые для работы библиотеки на с/с++. Огромный плюсом, и как я полагаю, неотъемлемой частью является наличие ассемблера для описанных выше платформ. Также в седьмой версии программы появилась поддержка конвертации скетчей Arduino в код программы для контроллера на языке си. Опция эта работает пока что несовершенно, и неспособна преобразовывать скетчи с несколькими вкладками, из-за чего теряет пока что определенную актуальность.

Но есть у этой среды и определенный недостаток: она не поддерживает наиболее популярный, и самый дешевый программатор USBaSP, и не поддерживает из «коробки» возможность программирования напрямую(используя порт USB) плат Arduino. И поэтому я в этой статье хочу поделиться определенным «лайфхаком», и я надеюсь, что это кому то будет действительно полезным.

Итак, приступим. Что нам необходимо иметь: ПК с установленными Atmel Studio 7, Arduino IDE желательно последней версии, и драйверами для вашей платы Arduino, ну и собственно, сам «пациент». Подключаем контроллер к ПК, дальше устанавливаются драйвера, и после вы должны выполнить несколько манипуляций, но это нужно будет сделать один раз для разных плат Arduino.

Сначала открываем среду Arduino IDE, выбираем любимый наш Блинк, и включаем вывод компилятора в окно компиляции внизу редактора:

image

Потом компилируем скетч, не загружая его в контроллер:

image

После вам необходимо открыть какой нибудь текстовый редактор, и выполнить пару вещей — скопировать команды для компилятора и флаги компиляции в окно редактора, и отредактировать подобным образом:

image

image

image

После, открыв среду Atmel Studio 7, выбираем во вкладке Tools пункт External Tools, cоздаем новый профиль (можете сделать несколько разных профилей для каждой отдельной платы Arduino, где в соответсвующие строки вставляем наши параметры, где указаны адрес программы avrdude, и команды для компилятора:

image

image

Потом можно создать любой проект, написав, к примеру, тот же код любимой моргалки, но уже на си, и загрузить наш код в контроллер, сначала собрав ваш проект, нажав F7 (Build project), и после кликнув на пункте с именем вашего профиля программирования во вкладке Tools:

image

Программа ваша будет записана в память программ контроллера, загрузчик останется на своем месте, и вы всегда сможете открыть Arduino IDE и записать ваш код привычным способом. Благодарю всех за внимание, и надеюсь, что данный совет будет кому нибудь полезен.
Поделиться с друзьями
-->

Комментарии (25)


  1. Ryppka
    06.01.2017 16:09

    Странный способ освоения avrdude, совсем нет опыта коммандной строки?


    1. FedyaShlyapkin
      06.01.2017 16:30

      пользователям виндовс командная строка как страшный сон


      1. GeMir
        06.01.2017 16:58

        И пользователям macOS тоже нет.


    1. Bratak
      06.01.2017 17:01
      -11

      Опыта работы с консолью предостаточно, как было замечено в статье, виндой пользуюсь исключительно, и в исключительных случаях — основной системой является linux. И вообще, всех товарищей, которые пишут код в блокноте на windows 98, вызывая gcc и avrdude в консоли, отправляю дружно в лес, собирать грибы. Туда же отправляются все те, кто говорит, что мнемоники асма это не тру, а надо брать датащит на МК, список инструкций AVR, и писать код сразу в hex-редакторе.Я не Линус Торвальдс, я не умею в уме вычислять хэш-функцию Вселенной, и мне как и многим важнее использовать инструмент с умом, и сосредотачиваться на собственно написании программы, которая будет работать и приносить деньги. А также все умники, которым хочется поумничать-дуйте обратно в свои пещеры: эта статья не демонстрация ума и возможностей, а просто попытка поделиться опытом.


      1. GeMir
        06.01.2017 18:09
        +4

        Обычно когда хотят поделиться опытом, к аудитории (тем самым «умникам») относятся несколько более приветливо, не посылая их «в лес» или «в пещеры».


      1. proton17
        07.01.2017 19:28
        +1

        Может перед тем как посылать всех в далекие путешествия сделаете нормальные скрины? Я, человек с хорошим зрением и 27 дюймовым монитором, сильно напрягаюсь, что бы увидеть что там вообще написано… И еще перед посыланием всех "которые пишут код в блокноте" хочу заметить, что даже крупные среды разработки имеют не самые удобные текстовые редакторы. У нас в конторе программисты активно пишут код в Sublime с прикрученными к нему компиляторами и отладчиками, да я и сам пишу в нем Verilog для ПЛИС, залезая в фирменную IDE только для прошивки собственно.


        1. Bratak
          07.01.2017 19:57
          +1

          Я, к сожалению, не обладаю ни хорошим зрением, ни 27 дюймовым монитором.Монитор у меня вроде 19 дюймов с разрешением 1280*1024, да и на планшете 1366*768 вроде все разборчиво.Про блокнот-это был не прикрытый сарказм, в сторону тех, кто полагает, что делать что либо таким же образом как и они-единственно верное решение.Кому как удобно, на вкус и цвет все фломастеры разные.


          1. proton17
            07.01.2017 20:14

            Вот пример хорошо оформленной статьи, скриншоты только активных окон, а не всего десктопа, код оформлен именно кодом. А "всех товарищей, которые пишут код в блокноте на windows 98, вызывая gcc и avrdude в консоли" это либо очень неудачный сарказм, либо Вы все же имели в виду именно то, что написали, считая людей так поступающих низшими формами жизни...


            1. Bratak
              08.01.2017 05:36

              Благодарю за совет-опыта у меня в этом маловато, это только вторая моя публикация, и в этой статье я хотел лишь поделиться этим решением с теми, кому это может быть нужно.Статья действительно была написана на скорую руку, и к товарищам, которые пишут код в блокноте или gedit и компилируют код просто вызывая компилятор в командной строке я отношусь положительно.Просто есть определенная антипатия к людям, которые говорят: я делаю вот ТАК, и это правильно, а вы все ничего не понимаете.По поводу оформления статьи рекомендации-учту, а всем остальным пожелаю писать хороший код-неважно где и каким способом.


          1. ExplodeMan
            08.01.2017 00:18

            Поддерживаю. У меня тоже не 27 дюймов, под каждого не подстроишься. А кому мелко, то есть волшебная комбинация в современных браузерах: CTRL +. Жмешь и все увеличивается.


  1. GeMir
    06.01.2017 16:30
    +7

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

    Скриншот активного окна в используемых для «работы и потехи «окнах»» делается при помощи Alt+PrtSc.


  1. old_bear
    06.01.2017 18:27
    +9

    Какой приятный для глаз шрифт первого абзаца и замечательно читаемый текст.


    1. serafims
      06.01.2017 23:26
      +6

      И скриншоты полупустых редакторов текста для обозначения редактируемого теста!


  1. serafims
    06.01.2017 23:32
    +3

    На самом деле, пример интеграции одного инструмента в другой полезный сам по себе.
    Но вот когда пишется статья, лучше все-таки писать ее в несколько этапов, перечитывая, форматируя написанное ранее.


  1. ExplodeMan
    07.01.2017 13:00

    Спасибо, взял на заметку.


  1. AVKinc
    07.01.2017 16:02
    +1

    Забавно, вы рассказали как программировать контроллер в родной его среде разработки. Как Будто Это Что-то Особенное.


  1. vvzvlad
    08.01.2017 08:38

    А причем тут вообще arduino-то? В смысле, зачем нужна была Arduino IDE? Команды получаются путем чтения мана avrdude и указанием нужного типа бутлоадера(arduino/stk500v1) после этого.

    Кстати, ардуиновский бутлоадер stk500-совместимый(arduino не стали придумать свой протокол и просто взяли систему команд от стандартного программатора atmel stk500), поэтому, может быть, не понадобится даже avrdude, атмел студия должна уметь работать с stk500v1 сама. Впрочем, это так, информация к размышлению — в бутлоадере, насколько я знаю, поддержаны не все команды оригинального протокола, не говоря уж о том, что фьюзы им защить не получится по определению.


    1. Bratak
      08.01.2017 09:51
      -1

      В платах Ардуино используется загрузчик, который использует возможность самопрограммирования контроллеров AVR.stk500 тут близко даже не причем: при подаче питания на контроллер ардуино, начинает выполняться загрузчик, который находится в памяти программ.Если во время выполнения загрузчика вывод reset подтянут на землю, то все команды, после нескольких начальных инструкций, которые подаются побайтно на вход uart0, контроллер записывает в памяти программ с некоторого адреса, точно какого не помню, вроде бы с 0x00, а загрузчик находится в конце памяти памяти.Если пользовательская программа не записана во flash, то при включении питания контроллер пробегает всю память программ, в которой записаны одни нули, пока не доходит до bootloader'а, потом он его выполняет, если reset в low, то он запишет все что получит(вначале идут фьюзы, потом собственно, инструкции пользовательской программы)код программы с 0 адреса, а фьюзы в нужные регистры.Это то, что знаю я, пожалуйста поправьте, если я ошибаюсь.Ардуиновская ide позволяет быстро взять команды и флаги компиляции для конкретного контроллера, запихать это в атмел студию, и начать работать.Мне, к примеру, это очень удобно, сначала я разрабатываю и отлаживаю девайс при помощи ардуинки, много раз все проверяя и отлаживая, используя описанный мною способ, после уже в чистый контроллер на изготовленной и распаянной печатной плате в последний через isp заливаю отлаженный код.


      1. vvzvlad
        08.01.2017 10:14
        +3

        Я, кажется, понимаю, почему у вас такая низкая карма. Я вам говорю одно, а вы с апломбом опровергаете мои слова, не потрудившись понять, о чем, я собственно говорю. Еще и вываливаете кучу информации с ошибками без разбиения на строчки.

        Повторю попытку еще раз, может получится: Arduino bootloader использует систему команд программатора stk500(первой версии, в avrdude называется stk500v1). Эта система команд была разработана для программатора, который подключается к компу по последовательному порту(во времена первых отладок атмела это был RS-232, первая ардуина тоже была с RS-232), и получая команды, дергает ножками SPI для загрузки прошивки в память МК.
        Бутлоадеров в первых контроллерах не было, а фьюзы реально были fuse — пережигаемыми перемычками внутри контроллера(оттуда и пошла путаница, которая лет 10 назад сгубила немало контроллеров, и которую сегодняшние разработчики почти не застали, с культурными fuse-calc, выдающими результат в HEX и ардуиной)

        Потом появились Arduino, и реализовали программатор внутри контроллера — в бутлоадере, взяв часть системы команд того самого STK500 первой версии. Теперь при запуске бутлоадера можно обойтись без промежуточного звена, командуя напрямую в последовательный порт контроллера — uart. Правда, реализованы там не все команды, фьюзы он шить не может, бутлоадер(себя же) перешить не может, и еще что-то не умеет, но запись и чтение основной программы умеет, а больше для ардуины и не надо.

        P.S. Второй речке привет.


        1. Bratak
          08.01.2017 11:01
          -6

          С кармой у меня все в порядке, а вот отрицательный показатель некоей величины, которую можно запросто купить-потому что такие вот пидарасы как ты превратили Гиктаймс и Хабр в помойку.Атписка, друзья.


          1. vvzvlad
            08.01.2017 11:03
            +1

            Вот это бомбануло. Простите.


          1. Anakros
            08.01.2017 13:47
            +1

            Точно не такие, как ты?


          1. GarryC
            09.01.2017 11:24

            Здравствуйте, милый Д'Артаньян.
            А матчасть все-таки подучите.


  1. stDistarik
    09.01.2017 05:20

    Вот здесь можно почитать про переход от ардуины к AVR Studio.


  1. alexhott
    09.01.2017 11:49

    Я после тестов на ардуине сразу перешел к разработке на контроллерах.
    Ну неудобно в конечное устройство припихивать ардуину мне и все тут — Лучше когда все на плате разведено и без соплей.
    На STK500 жаба мне денег не дала, купил дешевый AVR ISP за 100р на али, но с атмел студией он как и ардуина не дружит.
    С ним идет родна прога, которая умеет следить за обновлением файла и перешивать контроллер.
    Поэтому в студии остается только нажать Билд и при успешной сборке програ льется в контроллер — очень удобно оказалось и придумывать ничего другое не стал.