Дело, собственно, вот в чем: многие из нас, начиная свой путь программирования микроконтроллеров с платы 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, выбираем любимый наш Блинк, и включаем вывод компилятора в окно компиляции внизу редактора:
Потом компилируем скетч, не загружая его в контроллер:
После вам необходимо открыть какой нибудь текстовый редактор, и выполнить пару вещей — скопировать команды для компилятора и флаги компиляции в окно редактора, и отредактировать подобным образом:
После, открыв среду Atmel Studio 7, выбираем во вкладке Tools пункт External Tools, cоздаем новый профиль (можете сделать несколько разных профилей для каждой отдельной платы Arduino, где в соответсвующие строки вставляем наши параметры, где указаны адрес программы avrdude, и команды для компилятора:
Потом можно создать любой проект, написав, к примеру, тот же код любимой моргалки, но уже на си, и загрузить наш код в контроллер, сначала собрав ваш проект, нажав F7 (Build project), и после кликнув на пункте с именем вашего профиля программирования во вкладке Tools:
Программа ваша будет записана в память программ контроллера, загрузчик останется на своем месте, и вы всегда сможете открыть Arduino IDE и записать ваш код привычным способом. Благодарю всех за внимание, и надеюсь, что данный совет будет кому нибудь полезен.
Комментарии (25)
GeMir
06.01.2017 16:30+7Отличной идеей является не использовать полужирное начертание для каждого упоминания названия программного продукта.
Скриншот активного окна в используемых для «работы и потехи «окнах»» делается при помощи Alt+PrtSc.
serafims
06.01.2017 23:32+3На самом деле, пример интеграции одного инструмента в другой полезный сам по себе.
Но вот когда пишется статья, лучше все-таки писать ее в несколько этапов, перечитывая, форматируя написанное ранее.
AVKinc
07.01.2017 16:02+1Забавно, вы рассказали как программировать контроллер в родной его среде разработки. Как Будто Это Что-то Особенное.
vvzvlad
08.01.2017 08:38А причем тут вообще arduino-то? В смысле, зачем нужна была Arduino IDE? Команды получаются путем чтения мана avrdude и указанием нужного типа бутлоадера(arduino/stk500v1) после этого.
Кстати, ардуиновский бутлоадер stk500-совместимый(arduino не стали придумать свой протокол и просто взяли систему команд от стандартного программатора atmel stk500), поэтому, может быть, не понадобится даже avrdude, атмел студия должна уметь работать с stk500v1 сама. Впрочем, это так, информация к размышлению — в бутлоадере, насколько я знаю, поддержаны не все команды оригинального протокола, не говоря уж о том, что фьюзы им защить не получится по определению.Bratak
08.01.2017 09:51-1В платах Ардуино используется загрузчик, который использует возможность самопрограммирования контроллеров AVR.stk500 тут близко даже не причем: при подаче питания на контроллер ардуино, начинает выполняться загрузчик, который находится в памяти программ.Если во время выполнения загрузчика вывод reset подтянут на землю, то все команды, после нескольких начальных инструкций, которые подаются побайтно на вход uart0, контроллер записывает в памяти программ с некоторого адреса, точно какого не помню, вроде бы с 0x00, а загрузчик находится в конце памяти памяти.Если пользовательская программа не записана во flash, то при включении питания контроллер пробегает всю память программ, в которой записаны одни нули, пока не доходит до bootloader'а, потом он его выполняет, если reset в low, то он запишет все что получит(вначале идут фьюзы, потом собственно, инструкции пользовательской программы)код программы с 0 адреса, а фьюзы в нужные регистры.Это то, что знаю я, пожалуйста поправьте, если я ошибаюсь.Ардуиновская ide позволяет быстро взять команды и флаги компиляции для конкретного контроллера, запихать это в атмел студию, и начать работать.Мне, к примеру, это очень удобно, сначала я разрабатываю и отлаживаю девайс при помощи ардуинки, много раз все проверяя и отлаживая, используя описанный мною способ, после уже в чистый контроллер на изготовленной и распаянной печатной плате в последний через isp заливаю отлаженный код.
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. Второй речке привет.Bratak
08.01.2017 11:01-6С кармой у меня все в порядке, а вот отрицательный показатель некоей величины, которую можно запросто купить-потому что такие вот пидарасы как ты превратили Гиктаймс и Хабр в помойку.Атписка, друзья.
alexhott
09.01.2017 11:49Я после тестов на ардуине сразу перешел к разработке на контроллерах.
Ну неудобно в конечное устройство припихивать ардуину мне и все тут — Лучше когда все на плате разведено и без соплей.
На STK500 жаба мне денег не дала, купил дешевый AVR ISP за 100р на али, но с атмел студией он как и ардуина не дружит.
С ним идет родна прога, которая умеет следить за обновлением файла и перешивать контроллер.
Поэтому в студии остается только нажать Билд и при успешной сборке програ льется в контроллер — очень удобно оказалось и придумывать ничего другое не стал.
Ryppka
Странный способ освоения avrdude, совсем нет опыта коммандной строки?
FedyaShlyapkin
пользователям виндовс командная строка как страшный сон
GeMir
И пользователям macOS тоже нет.
Bratak
Опыта работы с консолью предостаточно, как было замечено в статье, виндой пользуюсь исключительно, и в исключительных случаях — основной системой является linux. И вообще, всех товарищей, которые пишут код в блокноте на windows 98, вызывая gcc и avrdude в консоли, отправляю дружно в лес, собирать грибы. Туда же отправляются все те, кто говорит, что мнемоники асма это не тру, а надо брать датащит на МК, список инструкций AVR, и писать код сразу в hex-редакторе.Я не Линус Торвальдс, я не умею в уме вычислять хэш-функцию Вселенной, и мне как и многим важнее использовать инструмент с умом, и сосредотачиваться на собственно написании программы, которая будет работать и приносить деньги. А также все умники, которым хочется поумничать-дуйте обратно в свои пещеры: эта статья не демонстрация ума и возможностей, а просто попытка поделиться опытом.
GeMir
Обычно когда хотят поделиться опытом, к аудитории (тем самым «умникам») относятся несколько более приветливо, не посылая их «в лес» или «в пещеры».
proton17
Может перед тем как посылать всех в далекие путешествия сделаете нормальные скрины? Я, человек с хорошим зрением и 27 дюймовым монитором, сильно напрягаюсь, что бы увидеть что там вообще написано… И еще перед посыланием всех "которые пишут код в блокноте" хочу заметить, что даже крупные среды разработки имеют не самые удобные текстовые редакторы. У нас в конторе программисты активно пишут код в Sublime с прикрученными к нему компиляторами и отладчиками, да я и сам пишу в нем Verilog для ПЛИС, залезая в фирменную IDE только для прошивки собственно.
Bratak
Я, к сожалению, не обладаю ни хорошим зрением, ни 27 дюймовым монитором.Монитор у меня вроде 19 дюймов с разрешением 1280*1024, да и на планшете 1366*768 вроде все разборчиво.Про блокнот-это был не прикрытый сарказм, в сторону тех, кто полагает, что делать что либо таким же образом как и они-единственно верное решение.Кому как удобно, на вкус и цвет все фломастеры разные.
proton17
Вот пример хорошо оформленной статьи, скриншоты только активных окон, а не всего десктопа, код оформлен именно кодом. А "всех товарищей, которые пишут код в блокноте на windows 98, вызывая gcc и avrdude в консоли" это либо очень неудачный сарказм, либо Вы все же имели в виду именно то, что написали, считая людей так поступающих низшими формами жизни...
Bratak
Благодарю за совет-опыта у меня в этом маловато, это только вторая моя публикация, и в этой статье я хотел лишь поделиться этим решением с теми, кому это может быть нужно.Статья действительно была написана на скорую руку, и к товарищам, которые пишут код в блокноте или gedit и компилируют код просто вызывая компилятор в командной строке я отношусь положительно.Просто есть определенная антипатия к людям, которые говорят: я делаю вот ТАК, и это правильно, а вы все ничего не понимаете.По поводу оформления статьи рекомендации-учту, а всем остальным пожелаю писать хороший код-неважно где и каким способом.
ExplodeMan
Поддерживаю. У меня тоже не 27 дюймов, под каждого не подстроишься. А кому мелко, то есть волшебная комбинация в современных браузерах: CTRL +. Жмешь и все увеличивается.