Программирование Arduino из Atmel Studio 7

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

Дело, собственно, вот в чем: многие из нас, начиная свой путь программирования микроконтроллеров с платы 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 и записать ваш код привычным способом. Благодарю всех за внимание, и надеюсь, что данный совет будет кому нибудь полезен.
Поделиться публикацией
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама
Комментарии 26
  • 0
    Странный способ освоения avrdude, совсем нет опыта коммандной строки?
    • 0
      пользователям виндовс командная строка как страшный сон
      • 0
        И пользователям macOS тоже нет.
      • –11
        Опыта работы с консолью предостаточно, как было замечено в статье, виндой пользуюсь исключительно, и в исключительных случаях — основной системой является linux. И вообще, всех товарищей, которые пишут код в блокноте на windows 98, вызывая gcc и avrdude в консоли, отправляю дружно в лес, собирать грибы. Туда же отправляются все те, кто говорит, что мнемоники асма это не тру, а надо брать датащит на МК, список инструкций AVR, и писать код сразу в hex-редакторе.Я не Линус Торвальдс, я не умею в уме вычислять хэш-функцию Вселенной, и мне как и многим важнее использовать инструмент с умом, и сосредотачиваться на собственно написании программы, которая будет работать и приносить деньги. А также все умники, которым хочется поумничать-дуйте обратно в свои пещеры: эта статья не демонстрация ума и возможностей, а просто попытка поделиться опытом.
        • +4
          Обычно когда хотят поделиться опытом, к аудитории (тем самым «умникам») относятся несколько более приветливо, не посылая их «в лес» или «в пещеры».
          • +1

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

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

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

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

            Скриншот активного окна в используемых для «работы и потехи «окнах»» делается при помощи Alt+PrtSc.
            • +9
              Какой приятный для глаз шрифт первого абзаца и замечательно читаемый текст.
              • +6
                И скриншоты полупустых редакторов текста для обозначения редактируемого теста!
              • +3
                На самом деле, пример интеграции одного инструмента в другой полезный сам по себе.
                Но вот когда пишется статья, лучше все-таки писать ее в несколько этапов, перечитывая, форматируя написанное ранее.
                • 0
                  Спасибо, взял на заметку.
                  • +1
                    Забавно, вы рассказали как программировать контроллер в родной его среде разработки. Как Будто Это Что-то Особенное.
                    • 0
                      А причем тут вообще arduino-то? В смысле, зачем нужна была Arduino IDE? Команды получаются путем чтения мана avrdude и указанием нужного типа бутлоадера(arduino/stk500v1) после этого.

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

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

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

                          P.S. Второй речке привет.
                      • 0
                        Вот здесь можно почитать про переход от ардуины к AVR Studio.
                        • 0
                          Я после тестов на ардуине сразу перешел к разработке на контроллерах.
                          Ну неудобно в конечное устройство припихивать ардуину мне и все тут — Лучше когда все на плате разведено и без соплей.
                          На STK500 жаба мне денег не дала, купил дешевый AVR ISP за 100р на али, но с атмел студией он как и ардуина не дружит.
                          С ним идет родна прога, которая умеет следить за обновлением файла и перешивать контроллер.
                          Поэтому в студии остается только нажать Билд и при успешной сборке програ льется в контроллер — очень удобно оказалось и придумывать ничего другое не стал.
                          • 0
                            С самого начала развлечения с Ардуино, я присматривался к альтернативам Arduino IDE, и каждый раз возвращался обратно.
                            Последняя моя попытка была как раз сегодня и с Atmel Studio 7 + Arduino IDE for Atmel Studio 7
                            Ну ладно, ноут у меня старый, так что я подожду без претензий, пока этот монстр на несколько гигов сначала установится, потом запустится.
                            Взял один и тот же скетч.
                            В итоге в Atmel он оказался 12472 byte (43%), а в родном Arduino IDE 1.8.1 — 11516 byte (40%)
                            Да, наверное можно было бы потратить еще какое-то количество часов, чтобы понять почему это, да от чего это… Но как ленивый консерватор, я ушел обратно в консерваторию.
                            Atmel Studio 7 + Arduino IDE for Atmel Studio 7 под снос.

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