РадиоКот :: Три страшных слова: исходный код, ассемблер, компиляция…
Например TDA7294

РадиоКот >Обучалка >Микроконтроллеры и ПЛИС >Микроконтроллеры AVR - пишем, компилируем, прошиваем... >

Теги статьи: Добавить тег

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

Автор:
Опубликовано 01.01.1970

Я все прекрасно понимаю: вам порядком наскучила досужая болтовня о всяких АЛУ, ПЗУ и ПВВ. Вы рветесь писать программу, шить ее в контроллер и любоваться ее безупречной работой. Что ж, сейчас я расскажу почти все, что понадобится нам для этого.

А что нам, собственно говоря, для этого понадобится?

Во-первых - редактор для написания текста программы.
Все начинается с того, что мы создаем файл с исходным кодом программы. Этот файл может иметь какое угодно расширение. Поскольку мы пишем программу на языке Assembler, то пусть расширение будет .asm

Во-вторых - компилятор – чтобы перевести исходный код в машинный язык.
Наверно, что такое компилятор, не знает сегодня только новорожденный. Это такая программулина, которая разгребает все то, что понаписАл программист и делает из этого исполнительный файл. Правда, в нашем случае, компилятор создает не исполнительный файл, а файл с машинными кодами, которые мы уже будем непосредственно прошивать в контроллер. Этот файл имеет расширение .hex

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

И в-четвертых - программа, которая будет управлять прошивкой HEX-файла в контроллер.

Во-общем, много нам всего нужно… :)
Ну что, приступим?
Поехали!


Редактор.

Хочу вас немного испугать (а может - обрадовать), но исходный код программы пишется в самом обыкновенном… блокноте! Да да, это который notepad.exe! Стандартная программа любого Виндовса.

Нет, конечно есть всевозможные AVR-Studio и проч., но мы сейчас рассматриваем самый простой, и при том – самый надежный вариант. Итак – БЛОКНОТ.

Компилятор

Компилятор, который мы будем юзать, называется tavrasm. Он скачивается с сайта www.tavrasm.org.

Программка запускается из командной строки. Так что, настоятельно рекомендую поставить себе какой-нибудь файл-менеджер. Лично я юзаю Windows Commander 5.11, и очень нежно и преданно его люблю :)

Но все равно, каждый раз прописывать ключи и файлы в командную строку – согласитесь – это для ОЧЕНЬ терпеливых людей. Поэтому мы поступим хитрее. Мы напишем BAT-файл (далее – «батник»).

Людям, вскормленным на Виндовсе, это может быть и не знакомо, поэтому, в двух словах – шо це таке батник.

Батник (файл с расширением .bat) – это исполняемый файл, который занимается тем, что запускает из себя выполнение других исполняемых файлов (.exe, .com, .bat и т.п.), в том порядке, в котором они вписаны в батник. Причем возможны ветвящиеся структуры (типа if). То есть, батнику можно передавать при запуске переменные, в соответствии со значениями которых он и будет делать либо одно, либо другое, либо третье, либо 153-е…

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

Ну вот. Значит, мы скачали файл tawrasmw.zip.
Теперь создадим на диске D: (или C:, или каком другом – без разницы) папочку AVR.
Распаковываем tavrasmw.zip в эту папку. Появляется папочка с названием "tavrasm.[номер версии]". Номер версии сразу подотрем, оставим только tawrasm. Внутри этой папочки – несколько файлов, и среди них – tavrasm.exe. Он то нам и нужен.

Путь к нему:
D:avr avrasm avrasm.exe

Теперь давайте создадим на диске еще одну папочку – AVR-projects - в ней мы будем содержать наши проекты на контроллерах.
Создадим внутри этой папочки еще одну, скажем, tutorial - в ней будут файлы нашего самого первого проекта.
И внутри нее – еще папочку – output – для hex-файлов. (Чтоб не маячили перед глазами.)

Таким образом, мы создали:

  • D:AVR-projects
  • D:AVR-projects utorial
  • D:AVR-projects utorialoutput

Теперь откроем блокнот и напишем текст батника:

D:avr avrasm avrasm.exe -i code.asm -e outputlistfile.lst -o outputhexfile.hex
pause=null

В первой строке мы вызываем компилятор tavrasm.
Мы ему говорим:
-i - тип выходного файла – "HEX"
code.asm – имя файла с исходным кодом. Вы можете вписать свое
-e – после этого ключа пишется путь к лист-файлу (он создается при компиляции)
outputlistfile.lst – относительный путь к лист-файлу
-o – после этого ключа пишем путь к выходному HEX-файлу
butputhexfile.hex – собственно, путь к HEX-файлу

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

Теперь в меню «Файл» блокнота выбираем «Сохранить как».

Окно Сохранить как

Имя файла (File name): compile.bat Тип файла (Save as type): All Files

Если оставить тип файла .txt, то блокнот сохранит файл под именем compile.bat.txt.
Сохраняем файл, ес-но, в папку tutorial.

Но не спешите вылазить из нета. Надо еще кой-чего скачать. А именно – фирменный компилятор от Atmel – "Avrasm". Он нам очень нужен из-за того, что в нем есть заголовочные файлы def.inc. А также – хелп. Правда – на английском. Кстати, русский хелп к ассемблеру для AVR можно посмотреть здесь

Качаем вот этот архивчик (компилятор Avrasm): https://atmel.com/dyn/resources/prod_documents/ASM.ZIP
Затем - создаем папку D:avravrasm и распаковываем в нее скаченный архив. Распакуется куча всего, и среди этой кучи – папочка Appnotes. Вот как раз она то нам и нужна. Соответственно, путь к ней будет такой:
D:avravrasmappnotes

Убедитесь, что в папочке есть файл 2313def.inc !

Все! Теперь можно приступать к написанию программы.
Создаем в блокноте новый файл и сохраняем его как code.asm в папку D:AVR-projects utorial. Это будет файл исходного кода.

Теперь можно написать первую строчку. Она выглядит так:

.include "D:avravrasmappnotes2313def.inc"

То есть, мы подключаем заголовочный файл.
Выбор заголовочного файла зависит от того, для какой микросхемы пишется софт. В данном случае, мы пишем для AT90s2313. Соответственно, и файл – 2313.

Заголовочные файлы xxxdef.inc содержатся в установочной папке любого атмеловского компилятора для AVR-ок. Например - AVR Studio. Он качается на сайте Atmel. Качаем, ставим, ищем папочку, куда установилась программа.
Скорее всего, это здесь: C:Program FilesAtmel.
Ищем в ней папочку Appnotes.
Путь к ней, скорее всего, такой: C:Program FilesAtmelAVR ToolsAvrAssemblerAppnotes.
Там будут необходимые файлы. Это на тот случай, если нужный файл не найдется в инсталляции Avrasm. Например, заголовочные файлы для новых семейств mega и tiny в Avrasm не входят :(

Также (ВНИМАНИЕ: ХАЛЯВА), все (почти все) заголовочные файлы для контроллеров AVR Atmel, можно скачать прямо у нас на сайте. Они находятся в архивчике appnotes.zip.

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

ldi R16,5     ;загрузка констант в регистры
ldi R17,7
and R16,R17   ;логическое «И» двух регистров
nop

Заметим, что синтаксис ассемблера не требует каких либо знаков после команды. Но каждая команда обязательно должна писаться с новой строки. Знак ";" (точка с запятой), которым во многих языках обозначается конец команды, в Асме используется для комментирования – то есть все символы правее этого знака и до перехода на новую строку, компилятор игнорирует.

Сохраняем файл. Окно можно не закрывать. Лезем в папку tutorial и запускаем compile.bat. Файл компилируется.
Не забывайте сохранять файл перед каждой компиляцией!

Окно компиляции

По окончании компиляции, внимательно читаем текст на черном окошке. Если там содержатся слова типа "Error" – значит компилятор нашел ошибку. Обычно, он пишет, что именно ему не нравится и в какой строке. Смотрим номер строки, жмем в Блокноте Ctrl+G, вводим номер строки – и курсор автоматически встает в ее начало.
Исправляем ошибку.
Если ошибок нет – проверяем, создался ли в папочке output файл hexfile.hex.
Создался? Вот и здорово! Значит, можно приступать ко второй части Марлезонского балета – прошивке...

ВНИМАНИЕ!!!
Если компилятор пишет что ему не нравится строчка файла def.inc, с примерно таким содержимым:
.equ OR = 3
Просто октройте def.inc, найдите эту строчку и закомментируйте ее. То есть, поставьте в самом ее начале символ ";".

<<--Вспомним пройденное----Поехали дальше-->>




Как вам эта статья?

Заработало ли это устройство у вас?

54 3 4
19 7 8