Как программировать arduino nano на ассемблере

как программировать Arduino на ассемблере на os x?

Я новичок в Arduino, но не в программировании. Недавно я купил Arduino Uno и, несмотря на то, что изначально узнал, что его можно запрограммировать только в c, я хотел посмотреть, могу ли я его программировать на ассемблере. Если бы кто-нибудь смог показать мне, как я могу на Mac OSX, или рекомендовать любые учебники для изучения этого, было бы весьма полезно. Также, если этот вопрос лишний, извините, но, пожалуйста, обратитесь к ответу, который отвечает на мой вопрос.

Вы можете использовать AVR GCC с помощью avr-as.exe или с файлом make. Для Mac я бы порекомендовал AdaFruit Mac Setup Guide. avr-gcc-4.8_2013-03-06_mingw32.zip скачать последнюю версию. Вы также можете использовать 4.3.2, который поставляется с Arduino IDE

Вы можете получить следующие окна для работы под MAC.

Веб- сайт WINAVR w/avr gcc WINAVRASM tutortial

Arduino IDE с встроенной сборкой. (отлично подходит для укладки ног в сборе)

Более поздняя, фактически использующая IDE Arduino для сборки непосредственно рядом с C++, поскольку она использует GCC, имеет значительное преимущество в том, что вы можете продолжать использовать загрузчик Arduino.

Вы можете grep (поиск файлов) через. \Arduino-1.5.5\hardware\arduino. каталоги, ищущие "asm", ищут множество примеров

Программирование Arduino в CLion

В этой статье я расскажу о небольшом how to о разработке для Arduino в CLion www.jetbrains.com/clion.
CLion — новая IDE для C/C++ от JetBrains. По стилю и поведению очень похожа на IDEA (IDE для Java). А так как я пишу на Java под IDEA с использованием «фишек» это IDE, то хотелось бы все эти «фишки» и use case разработки перенести на разработку для Arduino.

Вообще я пробовал разные IDE для Arduino — Arduino IDE, Eclipse с плагином для Arduino, Eclipse с плагином для AVR, Atmel Studio, Visual Studio с плагином VisualMicro и ReSharper C++. Последнее время остановился на Eclipse с плагином для Arduino. Но всё же некоторых привычных возможностей из IDEA не хватало.

И вот наконец JetBrains сделали IDE для C\C++ — CLion. Но пока без Arduino плагина. Но с поддержкой CMake. Вот этим можно воспользоваться!

arduino-cmake

В задаче по поддержке Arduino youtrack.jetbrains.com/issue/CPP-364 упоминается сборка CMake для Arduino github.com/queezythegreat/arduino-cmake вот ей то и воспользуемся.

Для этого установим Arduino SDK в папку, указанную в arduino-cmake (в Win это Program Files(x86)\Arduino). Использовать нужно именно 1.0.x версию, т.к. версия 1.5.x не поддерживается. Я брал последнюю версию 1.0.6.

Потом скачаем github.com/queezythegreat/arduino-cmake, далее вся работа будет построена на основе него. Для Windows нужно в файле cmake/Platform/Arduino.cmake исправить в строчках 1177, 1178 названия переменных с TARGET_PATH на TARGET_NAME. Это нужно сделать потому что в Windows не корректно формируется путь к hex файлу прошивки для avrdude. Скорее всего из за Win-like пути с буквой диска. Как это экранировать я не нашёл, поэтому просто указал относительный путь. Тем более что перед вызовом команды avrdude происходит переход в каталог с hex файлом. Эти изменения нужны, чтобы происходил upload программы в Arduino. Если не сделать, то будет только компилироваться.

Далее просто в CLion открываем этот CMake проект, через File->Import project.

Немного ждём, пока CLion обработает CMake файлы. И всё, проект готов.

Что бы настроить этот проект для загрузки в Arduino нужно выбрать конкретную Arduino-плату и порт с Arduino для загрузки программы. В example проекте это настраивается в example/CMakeLists.txt. Вся информация по настройке с примерами есть в arduino-cmake/README.rst

Создание своей программы

Сначала я пробовал использовать «скетчи» из Arduino, но в CLion у них не работал autocomplite, хотя контекст (в CLion справа внизу) был указан корректно. Поэтому я использовал просто cpp файл, который по содержимому был всего на пару строк больше «скетча».
При настройке своего CMakeLists.txt я использовал пример из duinoworks.bakketti.com/?p=11

Сначала создадим папку serial в корневой папке приложение (на одном уровне в папкой example) и добавим туда два файла — serial.cpp с кодом программы и CMakeLists.txt с настройкой проекта.

Обратите внимание, что в качестве платы я выбрал Arduino Nano с ATMEGA328 на порту COM8. Список всех поддерживаемых плат есть в C:\Program Files (x86)\Arduino\hardware\arduino\boards.txt (это название параметра до точки — uno, atmega328, diecimila и т.д.)

И подключаем папку serial — в корневом CMakeLists.txt добавляем строчку

Далее в CLion в окне CMake выбираем Reload CMake project:

Далее можно писать код как обычно. Пример редактирование кода с поддержкой autocomplite:

В CLion должны создаться конфигурации serial, serial-size, serial-upload. Нас интересует конфигурация serial-upload — она собирает и загружает программу.

Выбираем её и нажимаем либо Run->Buid (Ctrl+F9) либо просто кнопки Run или Debug возле выпадающего списка с конфигурациями. В первом случае произойдёт сборка и загрузка в Arduino, во втором тоже самое, но ещё попробует запуститься elf файл, что не получится и будет ошибка, но на результат это не влияет.

Программирование Arduino с помощью ISP программатора

Программировать Arduino Uno на «чистом» C или на Ассемблере не намного сложнее, чем с использованием стандартного языка программирования для Arduino. При этом вы можете сильно выиграть в производительности и сократить размер вашей программы. Далее речь пойдет о том, как перепрошить Arduino Uno R3 с использованием ISP программатора и AVR Studio 6.2.

Итак, нам понадобится Arduino Uno R3, любой ISP программатор совместимый с Atmel Studio 6, один светодиод и резистор, например, на 250 Ом. Для программирования Arduino я использую универсальный программатор Atmel ICE. Как я уже говорил, вы можете использовать любой программатор ISP для программирования Arduino. Список поддерживаемых программаторов вы можете посмотреть прямо в Atmel Studio.

Все знают, что в Arduino Uno R3 используется микроконтроллер ATmega328P-PU. Именно его мы и будем программировать. Фактически после записи нашей программы у нас будет уже не Arduino, а просто микроконтроллер с обвязкой. Так как мы сотрем загрузчик Arduino.

К сожалению, микроконтроллер ATmega328P-PU не поддерживает «продвинутую» отладку через JTAG. Вы, конечно, можете дебажить свой Arduino в Arduino Micro с точками останова и выводом значений в output (нужно явно запрашивать, что хотите получить), но такой подход не всегда удобен, к тому же в Atmel Studio есть значительно более совершенные средства отладки (просмотр состояний регистров, мониторинг памяти, и т.д.). По этому мы ограничимся тем, что будем просто прошивать наш контроллер по ISP.

Откройте Atmel Studio и выберите проект GCC C Exacutable Project, так как показано на рисунке.

image

Отлично, проект создан. Теперь нужно подключить наш программатор. Я использую Atmel ICE. Это универсальный программатор, который подходит для большинства микроконтроллеров AVR и ARM от Atmel. Подключаем программатор к компьютеру, затем в Atmel Studio выбираем пункт Tools -> Device Programming. Важно! Если у вас русская Windows то не создавайте проект в моих документах и вообще с папках с русским названием. Лучше создайте на диске отдельную папку с названием без кириллицы, например D:\myprog. Так же не забудьте запустить студию с правами администратора.

image

В открывшимся окне выбираем следующие опции: Tool — устройство для программирования\отладки в данном случае Atmel ICE, Device — микроконтроллер, который собираемся программировать, Interface — интерфейс через который наш программатор будет прошивать\отлаживать микроконтроллер, в данном случае доступен только ISP.

Нажимаем кнопочку Read для получения идентификатора устройства и его рабочего напряжения. Если Arduino подключена правильно, то вы должны получить номер устройства, например 0x1E950F и напряжение 4.9V.

Нажимаем Apply. После этого должны появится настройки для программатора так как показано на рисунке ниже.

image

Далее выполняем следующие действия. Меняем ISP Clock на 250. Затем переходим в раздел Memories и нажимаем кнопку Erase now. Важно! После этого действия вы не сможете использовать свой Arduino совместно с Arduino IDE, так как загрузчик будет удален.

image

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

Теперь нужно разобраться какая ножка микроконтроллера соответствует выводу на плате. Для этого нам понадобится datasheet.

image

Так как мы хотим управлять светодиодом с помощью 6-го вывода на Arduino мы будем использовать регистр PORTD и 5-й бит который подаст напряжение на 11 ножку нашего микроконтроллера.

Поместите следующий код в файл с кодом проекта.

Нажимаем «Ctrl + Alt + F5» или выбираем в меню пункт Debug -> Start Without Debugging. Светодиод начнет мигать!

Вот, собственно, и все… Обратите внимание на скорость прошивки и на размер программы. Данный пример занимает около 186 байт, что составляет 0.6% от объема памяти контроллера.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *