Язык ассемблера для avr

Содержание

Примеры на Ассемблере для микроконтроллеров Atmel AVR

Здесь представлены примеры различных программ на языке Ассемблера для микроконтроллеров Atmel AVR. Примеры выложены в виде проектов для AVR Studio под микроконтроллер ATmega16, поэтому при переносе на другие МК семейства AVR это нужно учитывать. Тактовая частота микроконтроллера во всех примерах 8 МГц (используется тактирование от внутреннего генератора). Код примеров разбит на блоки и снабжен комментариями. При обнаружении ошибок просьба сообщить на почту.

Краткое описание команд Ассемблера AVR представлено здесь.

Подробное описание каждой команды представлено в AVR 8bit Instruction Set.

Delays – Библиотека с подпрограммами задержки. Все задержки рассчитаны на тактовую частоту МК 8 МГц. Библиотека включает следующие процедуры:

Math – Библиотека с подпрограммами математических операций, включает следующие процедуры:

IO Ports – В данном примере рассматривается работа с портами ввода-вывода. К порту А подключены 8 светодиодов (линии 0-7). К линии 0 порта С подключена кнопка, с подтяжкой на землю. При нажатии кнопка выдает на линию 0 порта С уровень логической единицы. Цикл программы организован следующим образом: при запуске включается бегущий огонь, сначала загорается светодиод на линии 0 порта А, затем на линии 1 и т.д. По достижении линии 7 направление бегущего огня меняется (от 7 к 0). При нажатии на кнопку бегущий огонь останавливается и загораются одновременно все светодиоды. После повторного нажатия на кнопку бегущий огонь продолжает перемещаться с места остановки.

Dynamic Indication – В данном примере рассматривается работа с 7-сегментным индикатором. В моём случае он имеет 4 разряда (цифры). Поскольку у меня на плате установлены транзисторы для управления разрядами, то управление осуществляется выводом логической единицы и на разряды и на сегменты. Схема подключения следующая: к линиям 0-7 порта C подключены сегменты индикатора, а к линиям 0-3 порта В разряды индикатора. При запуске на индикатор выводятся цифры 1 2 3 4.

UART – В данном примере рассматривается периферийного модуля UART (универсальный асинхронный приёмопередатчик). Модуль UART можно настроить как на работу с прерываниями, так и без них (вручную, путём работы с флагами). Пример работает следующим образом: при получении байта, МК переходит в обработчик прерывания (используется только прерывание по приёму данных) и разбирает численное значение байта (0-255) на цифры, которые и выводятся на 7-сегментный индикатор. Схема подключения аналогична предыдущему примеру. Передача осуществляется по двум линиям UART (порт D линии 0-1), к которым необходимо подключить линии RX и TX преобразователя USB-UART. Для настройкки без прерываний необходимо обнулить бит RXCIE в регистре UCSRB и вручную опрашивать интерфейс в основном цикле программы.

Clock – В данном примере рассматривается реализация простых часов с 7-сегментым индикатором и парой кнопок. Только здесь уже требуется 6 разрядов, хотя секунды можно опустить. Кнопки с подтяжкой на землю. При нажатии кнопка выдает на линию высокий логический уровень. Индикатор подключается как и в предыдущих примерах (сегменты к порту C, разряды к порту B), а кнопки к линиям 2-3 порта D. Кнопка PD2 используется для установки минут, а PD3 для установки часов. По нажатию каждой из кнопок увеличивается значение соответствующего разряда (минуты или часы).

DS18B20 – В данном примере рассматривается работа с цифровым датчиком температуры DS18B20. Показания температуры выводятся на 7-сегментый индикатор. Вывод DQ датчика поключен к линии PC7. Линия должна быть подтянута к плюсу питания резистором на 4.7-10 кОм (согласно документации). Датчик опрашивается каждую секунду. Температура выводится на 4-разрядный индикатор: знак, два разряда на целуюю часть и один на вещественную. Документация к датчику здесь.

ADC Indication – Данный пример аналогичен примеру с UART. Отличие в том, что байт берется с линии 0 порта А (линия 0 АЦП, ADC0). Микроконтроллер по таймеру производит аналого-цифровое преобразование напряжения на линии 0 порта А, (младшие 2 бита отбрасываются как шум). При измерении используется внутренняя опора 5 В. К линии PD2 порта D подключена кнопка, которая определяет режим вывода показаний. При нажатии на кнопку выводится результат измерений в виде числа от 0 до 255. Если кнопка не нажата, то результат измерений переводится в вольты и выводится на индикатор (с точностью до десятых).

Fast PWM – В данном примере показана настройка аппаратного ШИМ (широтно-импульсная модуляция, англ. PWM). К линиям 4 и 5 порта D подключены светодиоды, а к линиям 0-3 порта С – кнопки. Кнопки с подтяжкой на землю (при нажатии кнопка выдает на линию порта уровень логической единицы) подключены к линиям 2-5 порта C. Кнопки на линях 2 и 3 соответственно увеличивают и уменьшают коэффициент заполнения ШИМ (меняется яркость светодиода) канала А. Кнопки на линях 4 и 5 соответственно увеличивают и уменьшают коэффициент заполнения ШИМ канала B. Число сравнения для каждого из каналов меняется в диапазоне от 0 до 255. Для канала А шаг изменения равен 10, для канала В шаг равен 5.

HCSR04 – В данном примере рассматривается работа с ультразвуковым датчиком расстояния HCSR04. К линии PD6 подключен вывод Trigger датчика, а к линии PD7 вывод Echo. Поключение 7-сегментного индикатора аналогично предыдущим примерам. По таймеру микроконтроллер раз в секунду опрашивает датчик и определяет расстояние до препятсвия в миллиметрах. После этого число разбивается на цифры и выводится на дисплей. Документация к датчику здесь.

Matrix Keyboard – В данном примере показана работа с матричной клавиатурой. Микроконтроллер динамически опрашивает клавиатуру, а затем определяет номер нажатой клавиатуры. Размер поля 3 на 3 – получаем 9 кнопок. Нажатие первых 8-ми приводит к зажиганию светодиода на соответствующей линии порта А, нажатие 9-ой кнопки зажигает все светодиоды порта А. Матричная клавиатура подключается к линиям 0-5 порта С (три столбца и три строки). В архиве схема и печатная плата матричной клавиатуры (Diptrace).

Shift Register – В данном примере рассматривается работа с модулем SPI на примере сдвигового регистра 74HC595. К регистру подключены светодиоды, в качестве линии CS используется линия 4 порта B (вывод not SS). Линия DS (14 нога) регистра идет к MOSI (PB5), линия SHCP (11 нога) к линии SCK (PB7), линия STCP (12 нога) к линии SS (PB4). Линии MR (10 нога) и OE (13 нога) должны быть подтянуты к высокому и низкому логическим уровням соответственно. По таймеру микроконтроллер меняет состояние светодиодов: поочерёдно горят то чётные светодиоды, то нечётные. Если при этом передать байт по UART’у, то он будет выведен в порт на светодиоды. Чтобы обратно переключиться в режим мигания необходимо послать по UART’у 0x00 (ноль). Документация к микросхеме 74HC595 здесь.

SG-90 Servo – В данном примере рассматривается работа с сервоприводом SG-90. Используется аппаратный ШИМ. Линия ШИМ сервпопривода подключена к каналу А аппаратного ШИМ. Кнопки поворота подключены к линиям PD2 и PD3. Кнопка на линии PD2 увеличивает длительность импульса, кнопка на линии PD3 уменьшает длительность импульса. Длительность импульса меняется от 1 до 2 мс. Описание сервомотора здесь.

RGB Lamp – В данном примере рассматривается работа с трехцветным RGB-светодиодом. Реализовано плавное переливание цветов с использованием программного ШИМ. Линии красного, зеленого и синего цветов подключаются соответственно к линиям 2, 3 и 4 порта D.

Источник

Практическое программирование микроконтроллеров Atmel AVR на языке ассемблера (3-е издание)

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

Микроконтроллеры, их возникновение и применение

Предыстория микроконтроллеров
Электроника в греческом стиле
Почему AVR?
Что дальше?

ЧАСТЬ I. ОБЩИЕ ПРИНЦИПЫ УСТРОЙСТВА И ФУНКЦИОНИРОВАНИЯ ATMEL AVR

Глава 1. Обзор микроконтроллеров Atmel AVR

Семейства AVR
Особенности практического использования МК AVR

Глава 2. Общее устройство, организация памяти, тактирование, сброс

Память программ
Память данных (ОЗУ, SRAM)
Энергонезависимая память данных (EEPROM)
Способы тактирования
Сброс
Особенности подключения дополнительной внешней памяти данных

Глава 3. Знакомство с периферийными устройствами

Порты ввода-вывода
Таймеры-счетчики
Аналого-цифровой преобразователь
Последовательные порты
U ART
Интерфейс SPI
Интерфейс TWI (12С)
Универсальный последовательный интерфейс USI

Глава 4. Прерывания и режимы энергосбережения

Прерывания
Разновидности прерываний
Режимы энергосбережения
Потребление МК AVR
Потребление МК AYR и режимы энергосбережения

ЧАСТЬ II. ПРОГРАММИРОВАНИЕ МИКРОКОНТРОЛЛЕРОВ ATMEL AVR

Глава 5. Общие принципы программирования МК семейства AVR

Ассемблер или С?
Способы и средства программирования AVR
Редактор кода
Об AVR Studio
Обустройство ассемблера
Программаторы
О hex-файлах
Команды, инструкции и нотация AVR-ассемблера
Числа и выражения
Директивы и функции
Общая структура AVR-программы
Обработка прерываний
RESET
Простейшая программа
Задержка
Программа счетчика
Использование прерываний
Задержка по таймеру
Программа счетчика с использованием прерываний
О конфигурационных битах

Глава 6. Система команд AVR

Команды передачи управления и регистр SREG
Команды проверки-пропуска
Команды логических операций
Команды сдвига и операции с битами
Команды арифметических операций
Команды пересылки данных
Команды управления системой
Выполнение типовых процедур на ассемблере
О стеке, локальных и глобальных переменных

Глава 7. Арифметические операции

Стандартные арифметические операции
Умножение многоразрядных чисел
Деление многоразрядных чисел
Операции с дробными числами
Генератор случайных чисел
Операции с числами в формате BCD
Отрицательные числа в МК

Глава 8. Программирование таймеров

8- и 16-разрядные таймеры
Формирование заданного значения частоты
Отсчет времени
Точная коррекция времени
Частотомер и периодомер
Частотомер
Периодомер
Управление динамической индикацией
LED-индикаторы и их подключение
Программирование динамической индикации
Таймеры в режиме PWM

Глава 9. Использование EEPROM

Еще раз о сохранности данных в EEPROM
Запись и чтение EEPROM
Хранение констант в EEPROM

Глава 10. Аналоговый компаратор и АЦП

Аналого-цифровые операции и их погрешности
Работа с аналоговым компаратором
Интегрирующий АЦП на компараторе
Принцип работы и расчетные формулы
Программа интегрирующего АЦП
Встроенный АЦП
Пример использования АЦП
Программа

Глава 11. Программирование SPI

Основные операции через SPI
Аппаратный вариант
Программный вариант
О разновидностях энергонезависимой памяти
Запись и чтение flash-памяти через SPI
Программа обмена с памятью 45DB011В по SPI
Запись и чтение flash-карт
Подключение карт ММС
Подача команд и инициализация ММС
Запись и чтение ММС

Глава 12. Интерфейс TWI (12С) и его практическое использование

Базовый протокол 12С
Программная эмуляция протокола 12С
Запись данных во внешнюю энергонезависимую память
Режимы обмена с памятью АТ24
Программа
Часы с интерфейсом 12С
Запись данных
Чтение данных

Глава 13. Программирование UART/USART

Инициализация UART
Передача и прием данных
Пример установки часов DS1307 с помощью UART
Приемы защиты от сбоев при коммуникации
Проверка на четность
Как организовать корректный обмен
Дополнительные возможности USART
Реализация интерфейсов RS-232 и RS-485
Преобразователи уровня для RS-232
RS-485

Глава 14. Режимы энергосбережения и сторожевой таймер

Программирование режима энергосбережения
Пример прибора с батарейным питанием
Доработка программы
Использование сторожевого таймера

Приложение 1. Основные параметры микроконтроллеров Atmel AVR

Приложение 2. Команды Atmel AVR
Арифметические и логические команды
Команды операций с битами
Команды сравнения
Команды передачи управления
Команды безусловного перехода и вызова подпрограмм
Команды проверки-пропуска и команды условного перехода
Команды переноса данных
Команды управления системой

Приложение 3. Тексты программ
Демонстрационная программа обмена данными с flash-памятью 45DB011В по интерфейсу SPI
Процедуры обмена по интерфейсу 12С

Приложение 4. Обмен данными с персональным компьютером и отладка программ через UART
Работа с COM-портом в Delphi
COM-порт и Windows API
Работа с СОМ через готовые компоненты
Установка линии RTS в DOS и Windows
Программа СОМ2000
Отладка программ с помощью терминальной программы

Приложение 5. Словарь часто встречающихся аббревиатур и терминов
Соответствие терминов на русском их переводу на английский
Соответствие терминов на английском их переводу на русский

Название: Практическое программирование микроконтроллеров Atmel AVR на языке ассемблера (3-е издание)
Автор: Ревич Ю. В.
Язык: Русский
Издательство: БХВ-Петербург
Год: 2014
Страниц: 370
Формат: DjVu
Размер: 12.46 MB

Скачать книгу Практическое программирование микроконтроллеров Atmel AVR на языке ассемблера (3-е издание)

Источник

Программирование МК AVR на языке assembler в среде Linux

Введение

Ни для кого не секрет, что микроконтроллеры семейства AVR прочно вошли в практику домашних поделок. Кроме того, уже несколько лет наблюдается массовое (на грани эпидемии) увлечение отладочными платами типа Arduino, построенными на базе все тех же AVR. Не буду судить, хорошо это или плохо, ибо статей на эту тему на ресурсе более чем достаточно. Хочу уберечь и моего читателя от споров на тему «что такое Arduino и хорошо это или плохо». Статья не об этом.

Рано или поздно для любого «ардуиньщика» (при условии что он хочет выйти на более высокий профессиональный уровень) наступает момент когда в рамках платформы Arduino ему становится тесно и он начинает задумываться о том а что же в действительности происходит под капотом. И ответы на все его вопросы уже есть, например в виде замечательного курса «AVR. Учебный курс» от глубокоуважаемого DIHALT. Если вы пользователь OS Windows, то и недостатка в инструментах разработки у вас не будет, достаточно бесплатной Atmel Studio, закрывающей все вопросы разработки ПО для МК AVR.

Хоть я и тимлид в коллективе разработчиков ПО прикладного уровня, вопросы «железа» которое в нашей конторе делается на базе AVR с недавних пор стали интересовать меня очень остро. Возникло желание хорошо разобраться во всех аспектах разработки ПО для МК. И так как я являюсь убежденным приверженцем использования в разработке OS на базе ядра Linux, меня заинтересовал вопрос, а как там в линуксах: можно/нельзя ли писать и отлаживать ПО, зашивать его в кристалл с тем же (или примерно тем же) уровнем удобства, который нам доступен в Windows. Тех кого тоже интересует этот вопрос, и в особенности тех, кому тема поста кажется надуманной, приглашаю под кат.

Что касается разработки на C/C++, в среде линукс с этим особых проблем и нет, в виду общей ориентированности этой системы на использование данного языка и наличия достойного набора инструментария. Однако, тот же DIHALT, например, утверждает что программирование для МК неотделимо от знания ассемблера, в чем я с ним соглашусь, в виду логичности его тезисов, изложенных в «Учебном курсе» и собственного (пусть небольшого) опыта системной разработки под x86.

Руководствуясь тезисом, что от асма AVR нам никуда не уйти и сидим мы под линуксом, попробуем посмотреть на то, как можно писать и отлаживать программы. Я использую дистрибутив Arch Linux, поэтому в своем повествовании буду опираться на его экосистему.

1. Выбираем компилятор

Сразу скажу, что связку Atmel Studio + wine я предлагать не буду. Не люблю я wine (хоть и пользуюсь по необходимости). Остановимся на нативных средствах, прежде всего компиляторов, обзор которых в сети и личные ковырялки дали выход на триумвират gavrasm, avra и avr-as. Выбор произошел по двум противоречивым критериям: поддержка синтаксиса предлагаемого Atmel и возможность отладки прошивки по шагам в эмуляторе. Последнее для меня более важно, а в плоскости курса @DIHAL так прям вообще необходимо для понимания процесса работы микроконтроллера. Общность синтаксиса с компиляторами от Atmel дает, опять таки с моей точки зрения, лишь возможность без труда адаптировать проекты Atmel Studio к работе в линуксах, что весьма сомнительное преимущество, ибо тот же avr-as существует и под Windows. Предлагаю читателю обзор перечисленной троицы.

gavrasm и avra

Поддерживают синтаксис Atmel. Первый нашелся в AUR и устанавливается командой

Собирается обоими компиляторами сразу в *.hex и результат работы выглядит примерно одинаково. Чтобы не возмущать благородных донов длинными портянками, помещаю результаты компиляции под спойлеры

Содержимое hex-файла прошивки
:020000020000FC
:060000000AE00395FECFAB
:00000001FF

Содержимое файла листинга

Program : 3 words.
Constants : 0 words.
Total program memory: 3 words.
Eeprom space : 0 bytes.
Data segment : 0 bytes.
Compilation completed, no errors.
Compilation endet 29.07.2017, 15:46:38

AVRA Ver. 1.3.0 test.S Sat Jul 29 16:02:05 2017

C:000000 e00a ldi r16, 10
M1:
C:000001 9503 inc r16
C:000002 cffe rjmp M1

Segment usage:
Code : 3 words (6 bytes)
Data : 0 bytes
EEPROM : 0 bytes

Assembly completed with no errors.

Анализируя результаты можно сказать, что:

дает указание на МК, скрывая от программиста явное указание ссылок на *.inc файл макроопределений. Существует и ряд других нюансов, о которых проще прочесть в документации или в хорошей обзорной статье Valber’а на русском языке. Об особенностях gavrasm можно почитать тут.

Оба рассмотренных компилятора имеют существенный фатальный недостаток — они не генерируют отладочной информации. Хотя в документации по avra такая возможность заявлена

Debugging support AVRA creates a coff file everytime the assembly was sucessful. This file allows AVR Studio or any coff compatible debugger to simulate or emulate the program.

но *.cof файл в выхлопе неизменно оказывается пустым. Отсутствие отладочной информации исключает адекватную отладку по шагам, остро необходимую начинающим. Так что от этих (к слову довольно старых альтернатив) переходим к другому, более могучему компилятору из семейства GNU

avr-as

Установка этого инструментария доступна из официальных репозиториев любого достаточно популярного дистрибутива. В случае с Arch Linux

GNU assembler (gas) является бэкэндом к компилятору gcc и обычно явно не вызывается. Связано это с идеологией *nix систем, ориентированных на разработку на C/C++, в которой ассемблеру отводится роль младшего нелюбимого сына. Вместе с тем это обеспечивает глубокую интеграцию ассемблерного кода в программы на C/C++ что, редко, но бывает необходимо. К тому же, если говорить об архитектурах x86/x86_64 синтаксис «гнутого» ассемблера (AT&T) разительно отличается от принятой Intel-нотации (хотя на gas можно использовать и интел-синтаксис, компилятор дает такую возможность). Чего стоит обратный по отношению к интел-нотации порядок операндов в командах, например

Применительно к AVR gas не отходит от нотации Atmel в части оформления команд — порядок операнд здесь привычный, например команда:

в gas для AVR выглядит привычно. Другое дело макросы и директивы компилятора, они отличаются от Atmel. Приведенная выше тестовая программа будет выглядеть так:

Мы же теперь соберем hex-файл, пригодный для прошивки МК. Команда:

генерирует объектный файл для соответствующего контроллера (в нашем случае ATMega 16). Далее данный объектный файл преобразуется в hex

Получая на выходе hex-файл вида

test.hex
:060000000AE00395FECFAB
:00000001FF

Тем не менее, мы не ответили на главный вопрос и не обозначили преимущество gas по возможности организации пошаговой отладки. Для этого прежде всего

2. Выбираем отладчик

В линуксах нет достойной альтернативы GDB. Для его использования применительно к МК AVR ставим фронтэнд

Данный отладчик обладает всем комплексом противоречий, пугающих новичков: при справедливо заявленной термоядерной мощи порог вхождения его довольно высок. Чтобы разучиться боятся gdb и начать в нем работать очень рекомендую статью величайшего и могучего и, к сожалению, ныне покойного (земля тебе пухом, Мыщъх!) Николая Лихачева aka Крис Касперски «Погружение в технику и философию GDB».

Первое, что нужно для использования gdb — собрать код соответствующим образом, сгенерировав ELF-образ, содержащий отладочные символы

test.hex
:060000000AE00395FECFAB
:00000001FF

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

3. Эмулятор AVR в Linux

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

и более популярный симулятор simulavr, который не был найден даже в AUR, при том что основная масса полезной инфы в сети именно о нем. Собрать из исходников с целью создания PKGBUILD для AUR у меня не вышло, хотя я перебрал все адекватные ветки в официальном репозитории. Пришлось прибить зверский костыль, скачав DEB-пакет для Debian, превратив его в пакет для арча с помощью утилиты debtap.

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

Версия эта довольно древняя, а текущий релиз (судя по дате последнего коммита в репозитории) ушел довольно далеко.

Что же касается simavr, то он ставится без проблем, поддерживает большее число МК, но на попытки подключения к нему отладчиком выдает в консоль сообщения о крэше эмулятора и разобраться с этим мне пока не удалось. Тут я снова апеллирую к сведующему в вопросе читателю и рассчитываю на подсказку.

Пока же мы используем для отладки костыльно поставленный simulavr

4. Пошаговая отладка на связке GDB + simulavr

Итак, сначала отладим программу хардкорно — из консоли запустим эмулятор

наблюдаем в консоли запуска сообщение

первый ключ уберет пафосный выхлоп gdb при запуске, вторая группа ключей активирует просмотр исходников в процессе отладки в применена мной для наглядности (на деле эта опция неудобна по ряду причин). В консоли мы увидим следующее:

Подлючаемся к эмулятору

Загружаем ELF-образ в эмулятор (да, именно его а не hex, на чем я обжегся в самом начале) d ‘vekznjh

Загружаем отладочные символы:

ответив «yes» на заданный вопрос, получая следующую картину:

Что же, мы видим наш исходник и отладчик, готовый к приему команд. Даем команду next

и видим как отладчик бодро переместился по коду.

можем посмотреть изменившееся состояние регистров контроллера как в консоли эмулятора

так и в окне отладчика:

С этого момента нам доступен весь богатейший инструментарий, предоставляемый отладчиком gdb. Однако, что линуксоиду хорошо то виндузятнику смерть меня упрекнут мол «чувак, в Atmel Studio есть нормальная отладка с отображением исходников, перемещением по коду хоткеями и просмотром значений вразумительным графическим способом» и будут правы, поэтому попытаемся хотя бы частично решить проблему дружественности отладки, совместив её с разработкой

5. Пошаговая отладка в IDE Eclipse

IDE Eclipse известна давно. За время своего существования она прочно утвердилась в разных областях разработки ПО и может «тупо всё», благодаря обширному набору плагинов, расширяющих её функциональность. В свое время я восторгался ей, но время это прошло, так как в обыденной работе у неё есть масса мелких нюансов, раздувающихся в недостатки (на работе в продакшене я предпочел для того же C/C++ QtCreator в силу специфики деятельности, о чем не жалею).

Тем не менее, с точки зрения решаемой нами задачи она вполне удовлетворяет её требованиям. Для работы с AVR в Eclipse потребуется установка следующих плагинов

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

Eclipse по своей сути ориентирован на C/C++ разработку, поэтому для создания ассемблерного проекта воспользуемся генерацией проекта через имеющийся Makefile, который и напишем для нашего теста. Вот он

жмем Next, в следующем окне выбирая расположение каталога с исходниками и Makefile

Шлепаем Finish и видим наш проект во всей красе

Тут мы сообщаем среде, что хотим запускать эмулятор с нужными нам параметрами командной строки, поместив пункт запуска в меню Run → External Tools.

Применяем настройки, идем в меню Run → External Tools → atmega16 и наблюдаем запуск эмулятора:

Хорошо, теперь настроим конфигурацию отладки нашего проекта. Идем в меню Run → Debug Configuratuions и настраиваем аппаратную отладку через GDB.

не забывая указать тип соединения с сервером симуляции:

и указав, какие действия следует выполнить при запуске отладки:

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

Жмем кнопки Apply и Debug и… вуаля!

Отладчик послушно стал на указанной точке останова. Доступен просмотр дампа памяти и содержимого регистров. Жмем F5 (или F6) и трассируем наш код по шагам.

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

Заключение

Что хочу сказать в финале? Я уже тысячу раз говорил о том, что все мои статьи на ресурсах хабр и гиктаймс — отражение личного опыта и рупор субъективного мнения. Решена задача — организация разработки ПО для контроллеров AVR в среде Linux. Эта статья — продукт долгого гугления и сбора информации из разрозненных сетевых источников. Цель её — натолкнуть новичка на поиск в нужном направлении. Статья не претендует на академичность, она лишь продукт моих собственных копаний и попытка поделится собранной информацией, а так же привлечь заинтересованных людей к интересной мне теме.

Тут много о чем не сказано, например о прошивке через avrdude, который (sic!) есть кроссплатформенная утилита прошивки для семейства AVR. Если у читателей будет желание, а у меня возможность, мы рассмотрим и её, помигаем светодиодами, пошлем слово «жопа» «счастье» через USART и так далее. Тема неисчерпаема и достойна продолжения. Время покажет.

А пока, благодарю моего читателя за внимание и надеюсь на новую встречу!

Источник

Поделиться с друзьями
admin
Оцените автора
( Пока оценок нет )
Как переводится?
Adblock
detector