Инструменты для программирования AVR микроконтроллеров в Linux. Программное обеспечение для AVR в Linux

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

Компилятор онлайн

Через пару минут я уже имел на руках скомпилированный бинарник. Помог сервис некоего турецкого программиста, который когда-то озадачился подобной проблемой и реализовал на своем сайте веб-интерфейс для доступа к компилятору. А чтобы пользоваться было еще удобнее, прикрутил компонент для редактирования кода. Подсветка синтаксиса, нумерация строк и даже автодополнения команд - почти маленькая IDE. Собирается в один исходник в один клик или по хоткею Ctrl-F7, после чего сервис отдает готовый бинарник. Если во время сборки произошли ошибки, то сообщения компилятора отобразятся в отдельной панели. Адрес для такого удачного сервиса на редкость странный:

cmpe150-1.cmpe.boun.edu.tr/phpccompiler/

login.php, причем сайт откроется только в Internet Explorer. Другое серьезное ограничение - отсутствие поддержки C++. А куда же сейчас без нее? Поэтому когда зашла речь о компиляции сорца С++, пришлось отыскать замену. К счастью, разработчики прогрессивного компилятора Comeau C/C++ на официальном сайте сделали фронтенд, который выполнен как раз в виде веб-приложения (www.comeaucomputing.com/tryitout).

Допускается выбор различных режимов компиляции, версии Comeau, а также любые другие параметры, которые ты мог передать сборщику через командную строку. Кстати говоря, последние релизы Comeau уже поддерживают большинство расширений C++0x (обновленный и модернизировнный стандарт С++), поддержка которого появилась сейчас в Visual Studio 2010.

«Зачем вообще привязываться к какому-то конкретному языку», - подумали ребята из ideone (ideone.com) и реализовали универсальный компилятор в 40 различных языков. Помимо С/C++ здесь поддерживаются еще и Java, C#, Pascal, Visual Basic .NET, все скриптовые языки, и даже ассемблер. Важно только уложиться в ограничения: 10 секунд на компиляцию, 5 секунд на выполнение, 256 мегабайт памяти. Помимо этого, программа не сможет обращаться в Сеть и работать с файлами. Некоторых ограничений удается избежать, собрав программу с помощью другой онлайт тулзы - codepad (codepad.org).

HEX и PE-редакторы

Теперь обратная ситуция - бинарник есть, а исходника нет. Как поправить в нем пару байтов? Честно говоря, толкового HEX-редактора в онлайне я в какой-то момент найти не смог и лишь потом случайно наткнулся на него на одном из форумов, где разработчик делился ссылкой на свой текущий проект и интересовался, а стоит ли ему вообще его продолжать. Беглого взгляда на HexPaste (hexpaste.com) было достаточно, чтобы закричать: «Стоит!».

Скажи, вот в каком оффлайн HEX-редакторе есть возможность коллективной работы нескольких людей? А здесь это возможно.

Онлайн, облако, IDE

В этот перечень я намеренно не стал включать инструменты для общения разработчиков внутри команды, а также планирования проектов. Их очень много, они разные и чаще всего платные. Я же уверен, что в большинстве случаев можно не строить умные диаграммы и графики, а воспользоваться простой системой для управления задачами вроде Teamer’а (www.teamer.ru). В любом случае у нас есть отдельный повод поговорить об инструментах планирования времени и управления задачами. Если тебе интересны способы увеличения эффективности, пиши нам! 🙂

Info

  • Эмуляция Pythonинтерпретатора, причем реализованная на Silverlight, доступна на сайте Try Python (www.trypython.org). А благодаря Utility Mill (utilitymill.com), из Python-скрипта можно легко сделать веб-сервис.
  • Зашить файлы на FTP-сервер также легко через веб. Для этого пригодится клиент net2ftp (www.net2ftp.com). Специально для PHP есть еще одна добротная IDE в бразуере - это phpAnyware ().

Среда поддерживает загрузку файлов FTP, имеет подсветку синтаксиса и в будущем обещает автодополнение команд.

Следуя пожеланиям читателей, мы будем вести разработку проектов в более современной и удобной программе: Atmel Studio 6.

У нее есть один существенный недостаток, который не позволяет воспользоваться этой программой на относительно слабых машинах. Это программа очень ресурсоемкая и она будет сильно тормозить на слабых компьютерах с двухъядерным процессором младших моделей и 2 гигабайтами ОЗУ. Сразу скажу, владельцы старых моделей компьютеров не будут забыты и для них будут выпущены обзоры по программам WinAVR и AVR Studio 4, чтобы они не чувствовали себя в чем-то ущемленными. Эти программы очень слабо нагружают процессор и требуют намного меньше памяти для работы.

Итак, перейдем к делу. Данная программа является полностью бесплатной и скачать её можно как с официального сайта Atmel, так и с торрент трекера, например Rutracker.org. После установки и запуска программы открывается окно приветствия и мастера создания проектов. Окно приветствия и мастер создания проектов мы закрываем. В работе эта функция совершенно бесполезна.

В результате остается одна рабочая область (кликните для увеличения картинки):


Для того, чтобы создать прошивку, то есть тот самый HEX файл, мы должны написать код, скомпилировать его и “собрать” проект. После этого у нас в папке с проектом, появится нужный нам файл с расширением *.HEX. Давайте разберем, как это делается на практике. Погнали!

Для создания проекта мы нажимаем в левом верхнем углу кнопки File => New => Project :


И видим следующее окно:


Здесь нам нужно выбрать СС++ и GCC C Executable Project:


Не спешите нажимать «ОК» и закрывать окно. В графе «Name» мы видим, что программа подставила нам имя проекта автоматом. В данном случае это GccApplication1. Также мы можем выбрать папку, в которую мы сохраняем проект:


Так как имя файла мне не нравится, то меняем его на Studio_6_Lesson_ 1. Путь для сохранения проекта я оставил по умолчанию. В данном случае в папке 6.2 у нас создастся папка с названием Studio_6_Lesson_ 1. В ней и будут находиться все необходимые нам файлы, имеющие отношение к нашему проекту:


Ну а теперь жмем ОК. Что мы видим дальше? А дальше открывается следующее окно:


Так как мы с вами договорились использовать МК Tiny 2313, то нам нужно выбрать именно эту модель. Для этого выбираем семейство Tiny, 8-bit.


Ну а потом выбираем наш МК Attiny 2313:


Здесь же можно вкратце ознакомиться с характеристиками на данную модель МК, узнать объем Flash памяти, ОЗУ, и EEPROM памяти. Также здесь можно скачать даташит на данную модель МК и ознакомиться со всеми характеристиками этого микроконтроллера.

После того как выбрали, жмем ОК. Перед нами открывается рабочее окно программы (для увеличения кликните мышкой)

А вот и самое главное окно:


Как мы видим, здесь уже автоматически что-то уже сгенерировалось. Перейдем непосредственно к коду.

Что же мы видим здесь?

Строки 1…6 — это у нас комментарии. Все комментарии бывают выделены зеленым цветом в отличие от кода программы, переменных, функций, и т. д. В комментариях мы видим название исходника на СИ нашего проекта: файл Studio_6_Lesson_ 1.с. В нем хранится наш код и его мы можем, если хотим, посмотреть и уточниться, чтобы не открывать каждый раз тяжелую для запуска студию. Открывать в том же блокноте Wordpad.

Итак, давайте разберем, что же обозначают все остальные строчки. Читаем комментарий, идущий после кода в каждой строчке. Комментарии у нас отделяются от кода, двумя символами знака деления(//). Правильно же это называется прямой двойной слэш.

Что же мы видим? Смотрим строку под номером 9. С нее начинается сама программа:

#include //Подключаем библиотеку аппаратных описаний МК

Эту строчка должна присутствовать абсолютно в любом проекте на любом МК AVR Mega и Tiny. Смысл этих команд я написал в комментариях, идущих после команды.


Здесь я хочу сделать небольшое отступление и разобрать отличия Atmel Studio 6.2 от той же WinAVR. В шестой студии есть очень удобная функция. Называется она автоподставления команд . Проявляется это в том, что как только мы начали набирать команду известную Студии, она сама предложит нам все возможные варианты команд на выбор, какие только есть в её памяти по нескольким первым буквам.

Нам достаточно нажать лишь клавиши ТАВ или ENTER и команда у нас подставится автоматически.

Разбираем строчку №10


Этой строчкой мы объявлем библиотеку задержек

#define F_CPU 8000000UL //Устанавливаем частоту для компилятора

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


#include //Подключаем библиотеку задержек

Этой командой мы “говорим” МК, что у нас в программе будет использоваться функция задержек работы микроконтроллера, или иначе говоря, режима холостой работы. В это время не будут выполняться никакие другие действия. На какое-то заданное время, МК, условно говоря, для нас как-бы зависнет.


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

Также можно увидеть и фигурные скобки для while . Открывающая скобка находится в строке 16, а закрывающая в строке 18.

Давайте напишем программу для мигания одним светодиодом. Для этого добавляем строчки:


PORTB=0b0000000 0; //Притягиваем все 8 выводов порта В к 0

Восемь цифр означают, что у нас 8 выводов порта В. Крайний правый — это В0, крайний левый — В7. Это обозначение означает 8 нулей после 0b, что по умолчанию у нас на всех выводах-ножках порта В установлен логический ноль, или говоря по-другому, они притянуты к нулю. Если говорить очень упрощенно, то это все равно, что они внутри МК соединены с землей устройства.

DDRB=0b11111111 ; // Конфигурируем все выводы порта В на выход

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


PORTB=0b0000000 1; //Подаем на порт В0 логическую единицу (зажигаем светодиод)

Итак мы видим, что крайняя справа у нас стоит единичка. Как мы помним из выше сказанного, это значит что мы на порт В0 вывели 1, или по другому говоря, на этом выводе у нас сейчас +5 вольт.

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

Что означают ниже приведенные две строчки кода, вы наверное уже догадались сами:

PORTB=0b0000000 0; //Подаем на порт В0 логический ноль (гасим светодиод)

_delay_ms(500); //Ждем 500 миллисекунд (0.5 секунды) Мы подаем ноль на ножку В0 и затем ждем пол секунды.

Но такая программа у нас длилась бы всего секунду, а что потом? А потом нам нужно вернуться к началу нашего бесконечного цикла, который мы объявляем командой While:


while(1) //Начинаем бесконечный цикл

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

И наконец, в конце нашей программы мы видим две фигурные скобки, по одной на каждый цикл программы, основной и бесконечный через While, читаем комментарий к последней скобке:

} //Возвращаемся к началу выполняемого тела программы, к строке 13

Уфф))… программа вроде бы написана, но как скормить этот код микроконтроллеру? Он же не понимает код, написанный в понятных нам словах и командах? А для этого нам нужно сначала скомпилировать прошивку. Делается это следующим образом.
Кликаем Build=>Compile и прошивка у нас будет скомпилирована.


Жмем Build=>Build Studio_6_Lesson_ 1 и считаем количество ошибок)), а они при самостоятельном написании первой программы скорее всего будут у начинающих кодеров.


Внизу под окном для написания кода есть окошко. В нем бегут какие-то непонятные для вас слова и строчки. В данный момент нам это не так важно. Важна только последняя итоговая строчка:


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

Итак где же — где же наш долгожданный HEX файл, который нам уже не терпится прошить в наш микроконтроллер)? Проще всего открыть папку с нашим проектом, в которой и будет находиться наша прошивка. Жмем File=>Open=>File и попадаем в папку с нашим проектом.


В той папке, где лежит проект, у нас находится исходник на СИ


Все, теперь этот файл можно скармливать как любому программатору для МК AVR, так и программе Proteus, если вы вдруг захотите перед сборкой конкретного устройства посмотреть, как это будет выглядеть в эмуляторе. Работу в эмуляторе Proteus можно прочитать в этой статье.

2

Я пытаюсь понять файл HEX, который я скомпилировал с помощью Microchip MPLAB X IDE , используя Microchip MPLAB XC16 Compiler .

Что касается MCU, я нацелен на PIC24EP512GU814. Однако сфера применения этого вопроса должна, по крайней мере, применяться ко всем микроконтроллерам PIC24.

Для компиляции примера HEX ниже, во время работы мастера "New Project", я выбрал Образцы> Microchip закладные> PIC24 C Шаблон и выбрал конфигурацию XC16_24EP512GU814 .

1. :02 0000 04 0000 fa 2. :08 0000 00 0002040000000000 f2 3. :02 0000 04 0000 fa 4. :10 0008 00 92 5. :10 0018 00 42

Рассмотрим линии 4 и 5. Первое поле правильно подсчитывает 0х10 (16) байт в поле данных. Однако второе поле, которое обозначает местоположение в памяти, перескакивает от 0x0008 до 0x0018 или 0x0010 (16) позиций.

Из моей интерпретации это означает, что этот конкретный HEX-файл является 8-битным, а не 16-битным, поскольку каждая позиция занята одним байтом.

  • Есть ли способ сделать вывод компилятора 16-битным файлом?
  • Этот файл еще действителен для 16-битного MCU? Как я могу интерпретировать файл HEX, чтобы я мог вручную запустить MCU?
  • 3 ответа
  • Сортировка:

    Активность

2

Файлы Intel HEX всегда обращаются к байтам. Это не означает, что они не могут обрабатывать информацию для других размеров слов, только чтобы существовало соглашение о том, как эти слова сопоставляются с байтами файла HEX.

Как и со всеми другими адресами, не адресованными байту (PIC 10, 12 и 16), адреса удваиваются в HEX-файле. Программное обеспечение программиста PIC знает это и соответственно интерпретирует адреса файлов HEX. Это, конечно, все хорошо задокументировано в спецификации программирования для любой части, которую вы хотите запрограммировать.

Вы говорите, что хотите создать своего собственного программиста. Это прекрасно, если вы понимаете, что это займет пути больше времени и разочарования, чем просто получение известного рабочего. Если точка - это опыт и обучение созданию собственного, то хорошо, но в противном случае пойти купить его.

Если вы действительно хотите сделать свой собственный, вы должны посмотреть на код для моих программистов PIC. Все хост-код и прошивка открыты и доступны в выпуске программного обеспечения для разработки по адресу http://www.embedinc.com/picprg/sw.htm .Просмотрев исходный код хоста, вы можете увидеть, как существуют флажки, указывающие, удваиваются ли адреса файлов HEX для разных частей памяти ПИК.

Если вы хотите, чтобы ваш программист был совместим с моим PIC programmers protocol , вы можете использовать все мои инструменты на стороне хоста. Это может быть очень полезно при создании вашей системы, так как вы знаете рабочий код с другой стороны. Спецификация протокола может сначала выглядеть пугающе, но внимательно посмотрите, и вы увидите, что многое из этого необязательно, особенно если вы планируете поддерживать только один ПОС.

0

Я подошел близко к покупке Пикета. Однако я не хочу привязываться к одному производителю. У меня есть другие проекты, которые могут или не могут использовать чипы Atmel. Вместо того, чтобы покупать нового программиста для каждого производителя, я мог бы также научиться самому это делать. Я также считаю это обогатительным опытом. - Daniel 10 ноя. 12 2012-11-10 15:02:17

3

Файлы Intel HEX всегда определяют байты, а адреса в файле измеряются в байтах. Это просто удобный формат, используемый для передачи двоичных данных между вашим компоновщиком и вашим программным обеспечением. Это зависит от программного обеспечения, которое вы используете для интерпретации данных и его адресов, и корректно вставляете их в ПИК.

0

Я понимаю, что программное обеспечение для программирования должно интерпретировать файл HEX, однако, мой текущий проект, чтобы сделать свое собственное программное обеспечение для программирования. Я использую Arduino для взаимодействия с MCU. Пока у меня есть прошивка Arduino и графическая оболочка. Все, что мне сейчас не хватает, это интерпретировать HEX-файл, чтобы я мог отправить правильную информацию в Arduino. Я знаю о других проектах Arduino-> PIC, но ни один из них не совместим с PIC24. -

Рассмотрим процесс преобразования исходного кода в машинный код, пригодный для записи в память микроконтроллера. Узнаем какие есть программные инструменты в операционной системе Linux для компиляции и прошивки программ в микроконтроллеры используя языки программирования Си и Ассемблер. Увидим какие есть среды разработки (IDE) для написания и обработки исходного кода под AVR в Linux.

Компиляция программы и HEX

Давайте разберемся как происходит компиляция, подготовка и запись программы в микроконтроллер AVR. Допустим что мы будем писать программу на языке Си для AVR микроконтроллера, вот что будет происходить в процессе работы:

  1. Написанный нами текст исходного кода (source code) программы на универсальном языке Си сохраняется в файл с расширением ".c";
  2. Содержимое файла ".c" передается на обработку программе-компилятору (compiler), которая переводит понятный нам код на языке Си в объектные машинные коды и создает на выходе файл с расширением ".obj";
  3. Такой бинарный файл не подходит для прямой записи в память микроконтроллера, поэтому его следует подготовить. Производим извлечение необходимых порций машинного кода и получаем на выходе текстовый файл с расширением ".hex" в формате Intel HEX;
  4. Производим запись файла с расширением ".hex" во внутреннюю энергонезависимую память микроконтроллера;
  5. Программа готова к выполнению в микроконтроллере!

Intel HEX - это специальный формат файлов, который служит для представления двоичных данных в текстовом виде. Данный формат позволяет указывать с точностью до байта в какие адреса нужно поместить те или иные данные в памяти микроконтроллера.

Рис. 1. Структура файла в формате Intel HEX.

Программное обеспечение для AVR в Linux

В пакетах программного обеспечения для Linux содержатся десятки тысяч программ и утилит.

Давайте же посмотрим что у нас есть в пакетах для нашего дистрибутива Linux по ключевому слову "avr", выполним поиск командой:

Apt-cache search avr

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

Для начала нам будет интересно вот что:

  • avr-libc - Стандартная библиотека C предназначенная для совместного использования с GCC специально под Atmel AVR;
  • avra - Ассемблер для AVR микроконтроллеров (AVRAssevmler);
  • avrdude - Программное обеспечение для программирования (прошивки) Atmel AVR микроконтроллеров;
  • avrdude-doc - Документация к программе avrdude для чтения в оффлайн режиме, формат HTML;
  • binutils-avr - Набор утилит для работы с данными для AVR микроконтрллеров (avr-objcopy, avr-size и другие);
  • gcc-avr - Компилятор языка GNU C, кросс-компилятор для AVR;
  • gdb-avr - Отладчик (GNU Debugger) для AVR микроконтроллеров;
  • simulavr - Консольный симулятор для Atmel AVR микроконтроллеров.

Установим весь этот набор ПО одной командой:

Sudo apt-get install avr-libc avra avrdude avrdude-doc binutils-avr gcc-avr gdb-avr simulavr

С этим набором программного обеспечения и каким-то редактором текста уже можно писать программы и прошивать микроконтроллеры AVR.

При помощи avra мы сможем скомпилировать исходный код на Ассемблере (sample_program.asm) и сразу же получить на выходе готовый HEX-файл (sample_program.hex) для записи в флешь-память микроконтроллера.

С помощью gcc-avr можно произвести компиляцию исходного кода на языке Си и получить на выходе объектный файл с машинными кодами (sample_program.obj), который потом при помощи программы avr-objcopy , что входит в комплект утилит binutils-avr , переконвертируем в HEX-формат (sample_program.hex) для записи в флешь-память AVR чипа.

При помощи программы avr-size из комплекса утилит binutils-avr мы сможем узнать размер секций, а также общий размер данных в получившемся HEX-файле чтобы убедиться что программа поместится в памяти микроконтроллера.

Мощная программа avrdude даст нам возможность считать и записать прошивку в микроконтроллер. Мы сможем записать в микроконтроллер прошивку в HEX-формате (sample_program.hex) которая была получена после компиляции программы на Ассемблере, Си или другом компиляторе для AVR.

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

Какие редакторы исходного кода и среды разработки подойдут для программирования AVR микроконтроллеров в Linux? - в принципе любые редакторы с удобной вам подсветкой синтаксиса для языков программирования Си и Ассемблера.

Ниже рассмотрим некоторые из редакторов и сред программирования, которые можно оптимизировать под свои нужды для удобного программирования AVR микроконтроллеров в Linux и не только.

Среда разработки Geany

Легковесная и свободная программа Geany - это кроссплатформенная (Linux, FreeBSD, MacOS, Windows) среда разработки для различных языков программирования (поддерживается около 50 языков) с множеством настроек, плагинов, красивой подсветкой синтаксиса и другими удобными фишками. Из плюсов в отношении разработки для AVR у программной среды Geany можно отметить:

  • Красивая подсветка кода, есть специально разработанный пресет для Ассемблера AVR
  • Встроенный терминал, удобно отслеживать процесс компиляции, прошивки, установки фьюзов и т.п.
  • Возможность настройки кнопочек Compile, Build, Run под команды для компиляции и прошивки программы в микроконтроллер
  • Простой и приятный настраиваемый интерфейс

Установка Geany в Linux производится одной командой:

Sudo apt-get install geany

Примерный вид программы с открытым исходным кодом на Ассемблере приведен ниже.

Рис. 2. Универсальная среда для разработчика программ - Geany в Linux.

CodeBlocks

Еше одна очень функциональная свободная кроссплатформенная среда разработки - это CodeBlocks. Данная среда поддерживает множество различных компиляторов и языков, есть встроенная поддержка GNU ARM GCC Compiler, GNU AVR GCC Compiler, есть поддержка плагинов и подсветку синтаксиса в коде. Очень мощная среда для программирования со встроенной поддержкой проектов для AVR и ARM.

Установить CodeBlocks можно командой:

Sudo apt-get install codeblocks

Вот как выглядит данная среда разработки:

Рис. 3. Среда разработки Code:Blocks.

NetBeans

Очень удобная свободная интегрированная среда разработки приложений (IDE). Поддерживает множество языков программирования:Java, Python, PHP, JavaScript, C, C++ и другие. Поддержка ASM есть в плагине для C, C++. NetBeans - универсальная, качественная и очень мощная среда разработки с множеством возможностей и удобств для разработчиков.

Рис. 4. NetBeans - универсальная среда разработки.

NetBeans поддерживает более 200 (на текущий момент 09.2015) различных плагинов под разные языки программирования и технологии, в этой среде можно все настроить под себя и сделать по своему вкусу. К тому же NetBeans может работать в портабельном режиме, что весьма удобно если все инструменты носить с собой на флешке.

При разработке программ для AVR эта среда представляет удобства в качестве редактора исходного кода, в котором есть дерево проекта, сортировка по функциям, проверка синтаксиса и многое другое.

Kate

KDE Advanced Text Editor или же кратко Kate - это мощный универсальный редактор что входит в состав среды рабочего стола KDE.

Рис. 5. Kate - универсальный редактор текстов и исходного кода.

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

Nano

Если вы привыкли все делать в консоли то здесь для программирования также есть мощные и простые в использовании инструменты. Листать и работать с файлами и директориями можно при помощи MC (Midnight Commander), а редактировать файлы можно в симпатичном и несложном в использовании редакторе Nano.

Нано гибок в настройке, поддерживает подсветку синтаксиса и прост в управлении.

Для установки редактора Nano нужно выполнить команду:

Sudo apt-get install nano

Вот как выглядит исходный код файла на ассемблере в редакторе nano:

Рис. 6. Консольный редактор Nano для программирования AVR микроконтроллеров.

Нашел недавно интересную программу под названием kontrollerlab, которая представляет собою среду заточенную под разработку программного обеспечения для микроконтроллеров. Данная программа является эволюционным продолжением набора утилит xavrtools.

Для работы в программе используются avr-gcc, avrdude, последовательный терминал (serial terminal) для удобной отладки, kate - как основной редактор кода встроенный в среду разработки.

Рис. 7. Kontrollerlab - среда разработки ПО для микроконтроллеров.

Последняя дата обновления проекта (сейчас 09.2015) на сайте sourceforge.net - 2013-05-28. Развивается ли проект и будет ли развиваться дальше - не известно. Но тем не менее он заслуживает внимания и эту среду разработки стоит попробовать в деле.

Программу можно скомпилировать из исходных кодов или же скачать готовые пакеты для Linux - *.deb или *.rpm.

AVRStudio

Отличная и бесплатная среда от самой ATMEL - это AVRStudio. Версии что работает под Linux не было и нет, к сожалению. Но тем не менее, по отзывам и статьям в интернете можно судить что версия 4.19 вполне удачно запускается и работает под wine (транслятор что позволяет запускать Windows-программы на Linux и Unix).

Рис. 8. Программа AVRStudio 4.

К тому же можно использовать виртуальную машину VirtualBox, пробросив в нее USB-программатор через реальный USB порт.

AVRStudio - очень удобная среда разработки под AVR микроконтроллеры с отличным симулятором, так что под Линукс можно и ее завести, приложив некоторые усилия.

На настройке и использовании AVRStudio под Linux я останавливаться не буду, для этого позже будет написана отдельная статья, сейчас важно чтобы вы знали что такая программа есть и что она работает в Линукс.

Заключение

Мы познакомились с программными инструментами для программирования AVR микроконтроллеров в Linux, узнали о рабочих средах и редакторах исходного кода для написания программ.

В следующей статье мы настроим среду программирования Geany для удобной работы по написанию и прошивке программ в микроконтроллеры.

Альтернативный компилятор ассемблера для х86. Ассемблер написан сам на себе имеет очень простой синтаксис. Позволяет создавать.com файл для ДОС. Поддерживает 32 разрядные режимы адресации и данных. Доступен вместе с исходным кодом.

Описание ассемблера.

  • Ассемблер работает из командной строки. Входной файл должен иметь любое имя с расширением:
    • .xxx или любым другим - значения не имеет, главное чтобы оно было

    Запуск на компиляцию:asm filename.ext. Результат - сообщение об ошибке в строке с № или filename.com / filename.obj

  • Ассемблер создает только*.com файлы, *.exe не созжаются. Конечно.com файл имеет ограничение 64 кб. кода, однако вряд ли кто-нибудь напишет на ассемблере больше. Т.к. создаются только*.com файлы не надо думать о сегментах. Нет у ассемблера и компоновщика. Он просто не нужен.
  • Ассемблер позволяет создавать модули*.obj , которые потом можно внедрять в код программ, как внешние подключаемые модули – подпрограммы.
  • Команды можно записывать в строчку разделяя их";"
  • Разделительные пробелы между командами и операндами вставлятьНЕ обязательно. Система команд х86 позволяет интерпретировать их и без пробелов.
  • Поскольку командаMOV встречается в программах на ассемблере наиболее часто ее имя писать не обязательно.
  • Регистр не имеет значения. Компилятор одинаково интерпретирует строки

    MOV AH,09
    movah,9
    aH,9

  • Ассемблер понимает 32 битные режимы адресации и автоматически вставляет префискы 32 битного адреса и данных, 66 и 67, когда это необходимо
  • Cистемa сообщения об ошибках довольно слабая. Сообщениеошибка в строке N следует понимать, какошибка в строке N +/- 1.
  • Команды математического сопроцессораНЕ поддерживаются .
  • * Коментарии вставляются между парными*
  • Основными синтаксическими элементами являются символы"=" и " () "
    • =Label= Вводит меку адреса.
    • (Label) вставляет значение адреса в код.

    Метки чувствительны к регистру.

Дальше рассмотрим пример HelloWorld .

* Кстати комментарии вставляются между парными звездочками
Пример1 "Hello World" выводит на экран надпись.*

JMPS(S)
=A1= "Hello World !"
=A2= 0A
=S= AX,B800;ES,AX;AX,3;INT10
CX,(A2-A1);SI,(A1);DI,500
AH,[(A2)]
=L= LODSB;STOSW;LOOP(L)
RET

Первая строка - это короткий переход к началу программы. Ассемблер располагает код и данные именно в том порядке, в котором вы их расположили в тексте.

JMP - кодирует длинный переход в пределах сегмента.
JMPS - короткий +/- 127 байт.
Со второй строкой все понятно. Третья строка:
По адресу (А2) в памяти ЭВМ размещается байт равный 0А.
Т.е.
Хотите зарезервировать в памяти байт - пищите так:
=vmode= 00 или =adr= 12
Надо выделить два байта пишите:
=X= 0000 или wo0
или
=Y=
wo something for example rd ptr 1234

Есть три ключевых слова определяющих размер.

  • by- BYTE (8)
  • wo - WORD (16)
  • dw - DWORD (32)

ассемблер проигнорирует все что встретит между этими буквами и первой цифрой.
Нужен массив из двойных слов - пожалуйста:
=array= dw0;12345678;01234;dw12;...
Желаете иметь таблицу адресов чего-нибудь - no problem:
=mytable= (adr1);(adr2);(adr3);dword(adr4)...
C адресами возможны следующие манипуляции:
CX,(A2-A1) * В CX получается длина строки(см пример)*
jmps (adr)+2;
mov ,(adr3-adr4)-5
В 386 процессоре появились команды длинного условного перехода. Отличаются они от коротких так:
JZ (adr) - короткий
JZ
_N (adr) - длинный.
Префиксы "66" и "67" вставляются автоматически.
Префиксы сегментов надо использовать в следующем виде:
ES:
LODSB
или
ES:;LODSB
SS:;MOVAX,}

Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: