Разработка программ в ide avr studio

Программирование Arduino на C в AVR Studio

Arduino — это готовая отладочная плата и очень простой язык для программирования, упрощающая начало работы с микроконтроллерами ценой размера и быстродействия программ. С недавних пор Atmel добавила поддержку бутлоадера Arduino в AVR Studio, то есть можно писать загружать без программатора программы написанные хоть на C, хоть на C++, хоть на Assembler.

Более того — можно в AVR Studio писать код на языке Processing/Wiring.
Рекомендую начать чтение статьи с update’а в конце!
В этой статье мы предлагаем пошаговую инструкцию по установке ПО для программирования Arduino с использованием AVR Studio. За основу мы брали обзор расширений AVR Studio с сайта easyelectronics.ru.

Все примеры мы будем запускать на нашей плате EduBoard.

Установка Arduino IDE

Мы используем версию Arduino 1.5.2. Скачать ее можно на официальном сайте. Последняя версия (1.6.2-r2 на момент написания статьи) по каким-то причинам не работает с микроконтроллером Atmega8.
Вы скачаете zip-архив с уже развернутой средой. Останется только распаковать ее в директорию с программами.

Установка Atmel Studio

Скачать среду можно на официальном сайте Atmel. Для этого вам потребуется регистрация на сайте. Обязательно пройдите ее — это понадобится и при установке расширений. Обратите внимание, что она работает только под Windows! Подойдут для нашей задачи только версии выше 6.0, то есть 6.1, либо 6.2!

Установка расширения Arduino для AVR Studio

Выберите пункт меню Tools -> Extension Manager. Перед вами откроется окно:

Extension Manager

Выберите пункт меню «Arduino IDE for Atmel Studio 6.1 & 6.2″ и нажмите кнопку «Download». Вам предложат ввести логин/пароль. Сделайте это и не забудьте поставить галочку «Remeber me». После этого через браузер начнется загрузка файла ArduinoForAtmelStudio.msi. После загрузки установите его и перезапустите AVR Studio.

Настройка AVR Studio

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

Configuring Visual Micro

Вы увидите, что вас появилась новая панель инструментов:

Панель Visual Micro

На ней необходимо выбрать плату, которую вы используете (в нашем случае Arduino NG or older w/ ATmega8) и номер COM-порта к которому она подключена. Больше настроек доступно в меню Tools -> Visual Micro.

Инструменты Visual Micro

Начало работы

В AVR Stuidio запустите менеджер проектов «New Project». Выберите сценарий Arduino Sketch:

Настройка проекта

В файле проекта с расширением .ino вы увидите стандартный формат Arduino-скетча. На плате к выводу d13 подключен светодиод. Это вывод микроконтроллера PB5. Для примера помигаем этим светодиодом. Удалите весь код и введите вот это:

#include #define F_CPU 16000000UL //16MHz #include int main(void) { DDRB |= 1

Источник: http://www.customelectronics.ru/programmirovanie-arduino-na-c-v-avr-studio/

Использование MS Visual Studio IDE для программирования AVR/Arduino | avr | programming

Источник: http://microsin.net/programming/avr/visual-studio-and-avr-programming.html

Среда разработки для Atmel AVR

Наиболее популярные IDE для написания прошивок для микроконтроллеров Atmel и их краткое описание.

Содержание:

Список популярных IDE для AVR

Наиболее популярные IDE для написания прошивок для микроконтроллеров Atmel являются:

  • Atmel Studio
  • Eclipse
  • IAR AVR
  • WinAVR
  • Code::Blocks
  • CodeVisionAVR

Далее мы рассмотрим подробнее каждую среду разработки из списка.

Atmel Studio

Atmel Studio – это “родная” среда разработки для МК от Atmel. Она создана и поддерживается фирмой Atmel, и поэтому в нее “из коробки” уже интегрированы все необходимые инструменты.

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

Также среда умеет работать с фирменными программаторами и отладчиками. Поддерживает все МК от Atmel, распространяется бесплатно и, вцелом, – штука удобная.

Atmel Studio работает на базе движка Visual Studio от Microsoft, что с одной стороны дает возможность работы в “привычном интерфейсе”, но с другой – намекает на возможность установки только в ОС семейства Windows (в linux-системах приходится либо запускать через Wine, либо в виртуальной машине).

Автодополнение, переход к оглавлениям и все удобства написания кода аналогичны имеющимся в Visual Studio. Скачать Atmel Studio можно на официальном сайте. Установка в ОС Windows сводится к запуску скачанного файла и применению метода next-next-next-finish.

Eclipse

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

Огромным преимуществом является её кроссплатформенность, то есть Eclipse можно установить и в Linux.

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

Автодополнение кода, переход к оглавлениям и все удобства написания кода присутствуют. Также следует отметить возможность быстрого просмотра регистров, портов и векторов прерываний всех поддерживаемых МК.

IAR AVR

IAR AVR является платной средой разработки и, по отзывам, – весьма не плохой. Так как мне с ней работать пока не пришлось – могу только дать ссылку на официальный сайт проекта

WinAVR

WinAVR – это целый набор разных утилит для программирования под AVR, который основан на бесплатном ПО, каждое из которых выполняет свою функцию (редактор, компилятор, прошивальщик и.т.д). В свое время это был один из самых удобных наборов инструментов. Официальный сайт проекта находится здесь.

Code::Blocks

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

CodeVisionAVR

CodeVisionAVR – это еще одна среда разработки для AVR для Windows. В ней также есть автодополнение и другие удобные штуки. Отличительной особенностью является возможность создания заготовки кода при помощи мастера путем выбора необходимых блоков.

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

Официальный сайт проекта находится здесь.

Источник: https://prototype.org.ua/article/avr_ide

Начало работы с AVR Studio 4 (урок 1)

Для работы с AVR Studio 4 необходимо само собой её установить. Если она уже установлена, то можете пропустить этот шаг.

Установка: создаешь каталог c:/avr/ – тут будут лежать рабочие программы. создаешь каталог например c:/works/ – тут будут лежать твои работы.

https://www.youtube.com/watch?v=g7d0IUXscOQ

надо что бы были короткие пути, что бы не было проблем с ними.

Дальше, качаешь и устанавливаешь в каталог c:/avr/ WinVR

AVRStudio4_SP3

Есть вообще AVRStudio5 но и AVRStudio4 пока вполне хватает.

Вся работа будет проходить в AVRStudio4, WinAVR нужна только из-за библиотеки AVR-GCC (Для того, что бы можно было писать на Си)
НО! первым надо установить именно WinAVR , иначе библиотека AVR-GCC не подцепится.

Дальше запускаешь AVRStudio4 и создаешь проект.

Тут думаю разберешься. AVR-GCC для того, что бы писать на Си

Atmel Avr Assembler соответственно для ассемблера.

Начинать разбираться с МК лучше с нуля. А это значит с Ассемблера, значит создаешь тот, который Atmel AVR Assembler.

Потом выбирай микроконтроллер Atmega8.

дальше нужно выбрать симулятор. выбирай: AVR Simulator -> Amega8

ну теперь нажимай финишь.

когда создастся проект, будет большой, белый, чистый лист. тут будет код.

немного про содержимое этого листа

“комментарии” – это текст, пропускаемый компилятором, при компиляции. перед началом комментария должен стоять спец символ, пользуюсь символом ; “точка с запятой”, есть еще “дабл сшеш” (//),

вот примеры комментариев

/* * Комментарий такого види(многострочный), * обычно используется для * сопроводительной информции * об исходном коде, т.е. * название, разработчик и т.д. */ NOP // Такой комментарий в основном используется для пояснения назначения команды, или куска кода SLEEP ; такой комментарий тоже как и предыдущий, можно использовать для пояснения (для заметок) в коде

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

MOV R16, R17 ; два параметра INC R16 ; один параметр SEI ; без параметров

С этим все ясно. дальше сложнее. Каждая команда, имеет размер 1, 2 или 3 байта.

MOV R16, R17 ; три байта INC R16 ; два байта SEI ; один байт

Видите связь размера команды с параметрами?

У каждого микроконтроллера свой ассемблер, хотя мнимоника у них похожа, т.е. команда MOV у мк одной серии будет выглядеть в машинном коде допустим 0x12 а у другого 0x55. что бы при компиляции, скомпилировалось в нужном нам коде мы должны сказать компилятору, для какого мк у нас пишется программа. это вообще выбирается при создании проекта.

По этому мы выбрали микроконтроллер Atmega8.

Но и тут не все. для облегчения нашей жизни, в AVRStudio4 есть набор констант, которые именуются вроде как “Макроассемблер”.

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

.include “m8def.inc” // командой .include, мы подгрузили файл m8def.inc ;и теперь нам станет легче 😉

в самом начале кода, ставится таблица прерываний. Что это такое и как это работает, объясню в другой заметке. Но а пока, будем писать её так:

RJMP RESET ; Reset Handler RETI; RJMP EXT_INT0 ; IRQ0 Handler RETI; RJMP EXT_INT1 ; IRQ1 Handler RETI; RJMP TIM2_COMP ; Timer2 Compare Handler RETI; RJMP TIM2_OVF ; Timer2 Overflow Handler RETI; RJMP TIM1_CAPT ; Timer1 Capture Handler RETI; RJMP TIM1_COMPA ; Timer1 CompareA Handler RETI; RJMP TIM1_COMPB ; Timer1 CompareB Handler RETI; RJMP TIM1_OVF ; Timer1 Overflow Handler RETI; RJMP TIM0_OVF ; Timer0 Overflow Handler RETI; RJMP SPI_STC ; SPI Transfer Complete Handler RETI; RJMP USART_RXC ; USART RX Complete Handler RETI; RJMP USART_UDRE ; UDR Empty Handler RETI; RJMP USART_TXC ; USART TX Complete Handler RETI; RJMP ADC ; ADC Conversion Complete Handler RETI; RJMP EE_RDY ; EEPROM Ready Handler RETI; RJMP ANA_COMP ; Analog Comparator Handler RETI; RJMP TWSI ; Two-wire Serial Interface Handler RETI; RJMP SPM_RDY ; Store Program Memory Ready Handler

После этого идет уже сам код

RESTART: ; маркер инициализации MAIN: NOP ; маркер главного цикла RJMP MAIN

Но тут есть одна (точнее не одна, а много) особенностей.

Для удобства написания кода, для его понятности и для облегчения относительных переходов, нам подарили маркеры, как они выглядят? “RESET:” и “MAIN:” это маркеры, в их именах могут содержаться почти любые символы латинского алфавита и цифры. Маркеры не могут иметь имена функций и команд, допустим “NOP”.
Как к ним переходит? Допустим командой RJMP.

Так же, из Маркеров, можно сделать подпрограмму(процедуру), по завершению которой, мы вернемся туда, от куда её вызывали. Для вызова её, используем команду “RCALL (подпрограмма)”, а что бы вернуться из Подпрограммы(процедуры), нужно закончить её командой “RET”. У нас должен получиться такой код:

RESTART: MAIN: NOP RCALL PPP1 ; вызываем подпрограмму RJMP MAIN PPP1: NOP RET ; выходим из подпрограммы

Как работает команда “RCALL”, при её вызове, адрес из какого места её вызвали, помещается в СТЕК, а по вызове команды “RET”, извлекается из регистра “стек”. СТЕК нужно инициализировать.

Что бы нам работать с нашим мк, нужно его инициализировать. т.к. мк, это устройство универсальное, в нем есть много портов ввода/вывода, и периферийных устройств. таких как УСАПП, ШИМ, ЦАП, АЦП и т.д. Первым делом в инициализации мк нужно указать начало “стека”. Инициализацию мы проводим после маркера “RESET:”.

LDI R16,HIGH(RAMEND) OUT SPH,R16 LDI R16,LOW(RAMEND) OUT SPL,R16

Если бы мы не вводили команду .include “m8def.inc” в начале кода, то нам пришлось бы писать так:

LDI R16,0x04 OUT SPH,R16 LDI R16,0x5f OUT SPL,R16

Разница существенная, на мой взгляд.

СТЕК, это память магазинного типа: (последний вошедший, выходит первым). Магазинного типа – это не супермаркет, а рожок от автомата. надеюсь все представили как в него заряжаются патроны и как они потом от туда извлекаются.

Нужно уделять очень большое внимание памяти СТЕК, т.к. любая незначительная ошибка в работе с ним, может привести к срыву стека. Это на столько важная тема, что я решил посветить ей целую тему и напишу её в отдельной заметке.

Таким образом у нас получился такой код:

.include “m8def.inc” RJMP RESET ; Reset Handler RETI; RJMP EXT_INT0 ; IRQ0 Handler RETI; RJMP EXT_INT1 ; IRQ1 Handler RETI; RJMP TIM2_COMP ; Timer2 Compare Handler RETI; RJMP TIM2_OVF ; Timer2 Overflow Handler RETI; RJMP TIM1_CAPT ; Timer1 Capture Handler RETI; RJMP TIM1_COMPA ; Timer1 CompareA Handler RETI; RJMP TIM1_COMPB ; Timer1 CompareB Handler RETI; RJMP TIM1_OVF ; Timer1 Overflow Handler RETI; RJMP TIM0_OVF ; Timer0 Overflow Handler RETI; RJMP SPI_STC ; SPI Transfer Complete Handler RETI; RJMP USART_RXC ; USART RX Complete Handler RETI; RJMP USART_UDRE ; UDR Empty Handler RETI; RJMP USART_TXC ; USART TX Complete Handler RETI; RJMP ADC ; ADC Conversion Complete Handler RETI; RJMP EE_RDY ; EEPROM Ready Handler RETI; RJMP ANA_COMP ; Analog Comparator Handler RETI; RJMP TWSI ; Two-wire Serial Interface Handler RETI; RJMP SPM_RDY ; Store Program Memory Ready Handler RESET: LDI R16,HIGH(RAMEND) OUT SPH,R16 LDI R16,LOW(RAMEND) OUT SPL,R16 RGMP RESET MAIN: NOP ; маркер главного цикла RJMP MAIN

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

Для правильного процесса отладки, необходимо задать эмулятору частоту, с которой будет работать МК, это делается только после компиляции и запуска отладки,
значит находим в панели меню “Build”, раскрываем её и видим “Build and Run”, после чего, мы увидим желтую стрелочку на против первой команды в нашем листинге кода. Теперь мы ищем в панели меню “Debug” и нажимаем “AVR Simulator Options”, открывается такое окно:

В котором мы можем поменять МК и его частоту, так же, на панели с права, мы видим некоторую информацию о нашем МК: его максимальную частоту, объемы памяти(EEPROM, RAM, FLASH).

Теперь открываем даташит на Atmega8, на странице 203 (общий список регистров) и 205 (общий список команд) и приступай к написанию своей программы.

И запомни, не бойся экспериментировать с симулятором, он от этого не сломается!

Источник: http://ddeev.ru/nachalo-raboty-s-avr-studio-4

Создание проекта AVR STUDIO 4

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

Для начала работы при запуске AVR Studio нужно нажать кнопку Create new project, в проектном диалоговом окне выбрать AVR Assembler, задать имя проекта и рабочую папку для него, затем нажать кнопку Finish, Можно сразу указать модель микроконтроллера, для которого разрабатывается программа, нажав Next и выбрав платформу для отладки и тип устройства. Создается проектный файл, файл *.asm будет доступен в окне редактора для ввода программы.

При написании программы на языке AVR Assembler можно воспользоваться файлом помощи, где перечислены и объяснены все инструкции и директивы. Обратиться к нему можно, выполнив команды из меню команд AVR Studio 4: Help;AVR Tools User Guide.

В открывающемся окне Html Help следует выполнить А VR Assembler;Parts и указать тип микроконтроллера. Подробное описание каждой из команд можно найти в разделе AVR AssemblerI Instructions.

Также доступна контекстная помощь при нажатии клавиши F1, дающая информацию о синтаксисе команды, расположенной рядом с курсором.

Предполагается включение в разрабатываемый код директивой .include файла *def.inc, по умолчанию расположенного в папке Program FilesAtmelAVR ToolsAvrAssemblerAppnotes. В подобных файлах для каждого устройства AVR определены мнемоники всех внутренних регистров, битов, векторов прерываний и т. п., что упрощает процесс написания программы для конкретного микроконтроллера.

Для трансляции программы необходимо нажать клавишу F7 или выбрать пункт меню Project; Build. При использовании директивы .

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

При отсутствии директивы такая проверка не проводится. Результаты трансляции будут показаны в окне Build панели вывода.

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

В соответствующей строке программы появится синяя стрелка и текстовый курсор. При трансляции можно получить файл определений программы (строки с директивами .def и .equ) с расширением .тар и файл листинга с расширением .1st, включающий команды в символьном и шестнадцатеричном коде.

Для этого необходимо выполнить команды Project; А VR Assembler Setup и в открывающемся окне установить соответствующие флажки.

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

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

До начала отладки можно выбрать или изменить платформу для отладки, выполнив команды меню Debug;Select Platform and Devise и выбрав А VR Simulator и тип устройства.

Запускается отладчик командой меню Debug;Start Debugging, Эта команда будет доступна только в случае успешной трансляции программы.

Выполнив команду меню Debug;AVR Simulator Options, в окне Device Selection указываем частоту работы микроконтроллера, а в окне Stimuli and Logging – метод работы с портами микроконтроллера.

Возможен автоматический ввод данных в порт (stimuli) из файла с расширением .sti и(или) протоколирование (logging) вывода. В обоих слз^аях данные представляются в виде

номер цикла: данные на ввод;вывод в шестнадцатеричном коде.

Протоколируя вывод, указываем имя порта, устанавливаем флаг То screen для вывода на экран. Затем нажимаем кнопки Add Entry и ОК.

Подготовительные операции закончены. Исходное состояние: все регистры микроконтроллера в окне НО сброшены в О, желтая стрелка в окне редактора указывает на первую команду программы. Используя опции меню Debug, выполняем отладку в одном из выбранных режимов: пошаговом, с контрольными точками, автоматическом. Подробно методика отладки программ в среде AVR Studio 4 описана в [7].

Источник: http://nauchebe.net/2011/02/sozdanie-proekta-avr-studio-4/

В поисках альтернативы atmel studio

Недавно вышла новая Atmel Studio версии 7.0. Как и все предыдущие IDE от Atmel, она не лишена ряда существенных недостатков:

  1. Отсутствие кроссплатформенности. Только Windows, причем, не ниже Windows 7
  2. Отсутствие поддержки популярных программаторов, JTAG-ов и т.д, только фирменные атмеловские инструменты
  3. Не умеет обновляться – каждую версию приходится ставить отдельно. Причем, если удалить предыдущую установленную версию, то может сломаться последняя.

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

Для сборки проекта студия использует утилиту make и генерит makefile. В принципе, makefile можно писать руками, но это не совсем удобно и очень громоздко.

Попытки использования разных известные аналогов make (cmake, scons и прочее) желаемого результата также не дали. Хотелось своего велосипеда – чего-то предельно простого, гибкого и удобного. В качестве основы был выбран Python, т.к.

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

Утилита AVR builder

Пример простого проекта

Описание сценариев компиляции должно быть максимально простым – для сборки достаточно указать список исходных файлов, модель микроконтроллера и, как правило, его тактовую частоту. Так же хотелось иметь возможность собирать одной командой неограниченное множество различных прошивок (например, debug, release, прошивки для кварцевых резонаторов разных частот и т.д.)

Минимальный файл конфигурации выглядит так:

name = 'my_project'
src = ['src/*.c']
mcu = 'atmega8'
frequency = 16*1000000

Этот файл сохраняется под именем make.builder в корень проекта. Утилита при запуске читает этот файл, создает директорию build и запускает компиляцию всех файлов, указанных в списке src.

В случае успеха будет создан файл прошивки build/my_project.hex. При этом нет необходимости явно перечислять все исходные файлы, можно использовать символ *. В данном примере, будут скомпилированы все файлы с расширениям .

cиз директории src

Дополнительно в файле конфигурации можно указать параметры программатора (используется avrdude), набор макросов препроцессора и опции компиляции.

Более сложный пример

name = “my_project”
src = [“src/*.c”, “src/lib/*.c”, “src/*.

s”]
mcu = “atmega8”
frequency = 16*1000000 # параметры вызова avrdude
port = “com1”
baudrate = 1200
programmer = “usbasp” # макросы
defines = ['GLCD_DEVICE_AVR8', 'GLCD_CONTROLLER_PCD8544', 'GLCD_USE_AVR_DELAY', '__DELAY_BACKWARD_COMPATIBLE__'] # опции компилятора и сборщика
compiler_options = ['-Os']
linker_options = ['-Wl,–relax'] configurations = { “debug”: { “name”: “my_project_debug”, “defines”: ['DEBUG=1'] }, “release”: { “name”: “my_project_release”, “defines”: ['DEBUG=0', 'NDEBUG'] }, “demo”: { “name”: “my_project_demo”, “defines”: ['DEBUG=0', 'NDEBUG', 'DEMO_MODE'] }
}

Тут дополнительно определены макросы препроцесора для условной компиляции (параметр defines) и настройки программатора для avrdude. Кроме того, в этом примере определены три конфигурации проекта с именами “debug”, “release” и “demo”.

Теперь скомпилированную прошивку можно залить на устройство командой

builder upload

При необходимости можно указать и параметры компиляции и сборки (параметры compiler_options и linker_options).

По умолчанию билдер задает эти параметры так, чтобы на выходе получалась максимально компактная и оптимизированная прошивка.

На моих примерах размер прошивки получался меньше, по сравнению с размером прошивки, собираемой Atmel Studio 7 для release-сборки с параметрами по умолчанию.

Поддержка разлличных конфигураций

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

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

Также для сборок можно настроить имя конечного hex-файла (параметр name). Списки препроцессорных констант из конфигурации (параметр defines) будут добавлены к общему списку.

Команда

builder all

соберёт все сборки и положит их в директорию build

Команда

builder release demo

соберёт только сборки release и demo

Команда

builder clean debug upload

очистит содержимое каталога build, затем соберет сборку debug и запишет ее на устройство.

Если в конфигурации конкретной сборки определен параметр, который уже определен в общей конфигурации (например, параметр “name”), то его значение будет взято из параметров сборки если параметр не является массивом. В случае массива значение параметра будет взято из объединения массивов общих параметров с параметрами сборки.

Поддержка bootloader-ов

Если для обновлении прошивки предполагается использовать загрузчик, то, вместо того, чтобы каждый раз вручную “приклеивать” его к прошивке, можно указать в путь к его файлу параметром bootloader_hex:

bootloader_hex = 'bootloader.hex'

В этом случае код загрузчика будет взят из файала с именем “bootloader.hex” и вставлен в собранный файл прошивки. По умолчанию загрузчик ищется в корневой директории проекта, но можно указать полный абсолютный или относительный пусть.

Другие платформы

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

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

Сейчас утилита умеет собирать проекты из исходников на С и ассемблере (файлы с расширением .S). Работоспособность проверялась под Mac OS X и Windows.

Сборщик пытается автоматически определить местоположение исполняемых файлов avrgcc, и если у него это не получилось (или получилось плохо), то путь к компилятору можно определить в переменной среды AVR_GCC_HOME (должна указывать на директорию c исполняемыми файлами avr-gcc, avr-objcopy, avr-objdump, avr-size и avrdude).

Для компиляции обычного консольного приложения надо изменить тип компилятора на GCC:

compiler = 'gcc'

(по умолчанию compiler = 'avr')

Примеры использования сборщика можно посмотреть в следующих проектах:
https://github.com/trol73/avr-lcd-module-128×128
https://github.com/trol73/avr-ic-tester
https://github.com/trol73/avr-lamp-timer
https://github.com/trol73/avr-turnlight-relay

Выбор альтернативной IDE

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

Так же NetBeans имеет средства рефакторинга – можно, например, переименовывать переменные и методы в исходниках. В итоге, по удобству работы NetBeans, как мне показалась, превосходит AtmelStuidio.

Правда, при работе в Windows в последней версии NetBeans замечено некоторое количество некритичных но неприятных багов.

Вообщем-то почти аналогичными возможностями из коробки обладает IDE Eclipse CDT. Но тут, как минимум, все хуже а ассемблерными файлами – подсветка синтаксиса примитивнее и нет возможности перемещаться по объектам как по ссылкам (по крайней мере, на момент написания статьи).

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

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

Под Mac OS X достаточно удобным показался Xсode – тут из коробки для Си-проектов у меня заработало все кроме рефакторинга.

В качестве Makefile используется файл вида

all: python ~/bin/avr-builder/builder.py

Если Netbeans не находит каких-то утилит, то путь к ним можно прописать в файле (тут имя директории зависит от версии) /Applications/NetBeans/NetBeans 8.2.app/Contents/MacOS/netbeans. Я, например, добавил в самое начало этого файла строку

export PATH=”/usr/local/sbin:$PATH:/Users/trol/bin”

Проект утилиты-сборщика можно скачать с гитхаба: https://github.com/trol73/avr-make

Источник: http://trolsoft.ru/ru/soft/avr-builder

Разработка программ в IDE AVR Studio

В поддержку своей архитектуры в 1997 г. Atmel выпустила AVR Studio – программный продукт для разработки приложений на основе AVR-микроконтроллеров.

AVR Studio представляет собой интегрированную среду разработки IDE (Integrate Development Environment), объединяя в себе большое количество различных инструментов для написания и отладки программ. Продвигая на рынке новую продукцию, Atmel с самого начала попыталась сделать ее максимально открытой для потребителя.

AVR Studio не является исключением. Последняя версия IDE, равно как и любая информация по AVR-микроконтроллерам, всегда свободно доступна на сайтах производителя.

Минимальный набор разработчика в IDE представлен фирменным ассемблером и симулятором. Однако AVR Studio легко интегрируется со многими программными средствами сторонних производителей.

И на сегодняшний день, в частности, в нее включена поддержка постоянно развивающегося компилятора языка Си WinAVR основанного на принципах GNU.

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

Принцип работы ассемблера

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

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

Так команда пересылки между двумя РОНами mov Rd,Rr является прототипом 16-разрядного кода операции 0010 11rd dddd rrrr. Битовые поля ddddd и rrrrr в нем определяют адреса регистров приемника и источника соответственно.

Например, для пересылки регистра R5 в R22 необходимо записать на ассемблере mov R22,R5 или 0010 1101 0110 0101 на машинном языке. Разница в восприятии очевидна.

Каждую команду ассемблера можно логически разделить на две части: мнемонику и операнды. Мнемоника   Операнд 1   Операнд 2

   mov   Rd,   Rr

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

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

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

Существует большое количество различных форматов выходных файлов, но самый распространенный из них 16-тиричный Intel Hex Format. Файлы такого типа, как правило, имеют два различных расширения: .hex у файлов содержащих коды программ, и .epp у файлов, содержащих данные для записи EEPROM-памяти.

В соответствии со своей технологией работы, компилятор создает также объектный файл с расширением .obj.

В нем размещена служебная информация для внутреннего пользования (относительные и абсолютные адреса операндов, место расположения объектов в пределах сегмента и т.д.).

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

После сборки проекта могут быть сгенерированы также файлы, имеющие расширение .lst (файл листинга), .map и некоторые другие. В первом из них находится полный отчет о проделанной компилятором работе. Во втором приводится перечень всех символьных имен, встретившихся в программе, и их числовых значений.

Перейти к следующей части: Синтаксис ассемблера

Источник: http://cxem.gq/mc/book19.php

Ссылка на основную публикацию
Adblock
detector
",css:{backgroundColor:"#000",opacity:.6}},container:{block:void 0,tpl:"
"},wrap:void 0,body:void 0,errors:{tpl:"
",autoclose_delay:2e3,ajax_unsuccessful_load:"Error"},openEffect:{type:"fade",speed:400},closeEffect:{type:"fade",speed:400},beforeOpen:n.noop,afterOpen:n.noop,beforeClose:n.noop,afterClose:n.noop,afterLoading:n.noop,afterLoadingOnShow:n.noop,errorLoading:n.noop},o=0,p=n([]),h={isEventOut:function(a,b){var c=!0;return n(a).each(function(){n(b.target).get(0)==n(this).get(0)&&(c=!1),0==n(b.target).closest("HTML",n(this).get(0)).length&&(c=!1)}),c}},q={getParentEl:function(a){var b=n(a);return b.data("arcticmodal")?b:(b=n(a).closest(".arcticmodal-container").data("arcticmodalParentEl"),!!b&&b)},transition:function(a,b,c,d){switch(d=null==d?n.noop:d,c.type){case"fade":"show"==b?a.fadeIn(c.speed,d):a.fadeOut(c.speed,d);break;case"none":"show"==b?a.show():a.hide(),d();}},prepare_body:function(a,b){n(".arcticmodal-close",a.body).unbind("click.arcticmodal").bind("click.arcticmodal",function(){return b.arcticmodal("close"),!1})},init_el:function(d,a){var b=d.data("arcticmodal");if(!b){if(b=a,o++,b.modalID=o,b.overlay.block=n(b.overlay.tpl),b.overlay.block.css(b.overlay.css),b.container.block=n(b.container.tpl),b.body=n(".arcticmodal-container_i2",b.container.block),a.clone?b.body.html(d.clone(!0)):(d.before("
"),b.body.html(d)),q.prepare_body(b,d),b.closeOnOverlayClick&&b.overlay.block.add(b.container.block).click(function(a){h.isEventOut(n(">*",b.body),a)&&d.arcticmodal("close")}),b.container.block.data("arcticmodalParentEl",d),d.data("arcticmodal",b),p=n.merge(p,d),n.proxy(e.show,d)(),"html"==b.type)return d;if(null!=b.ajax.beforeSend){var c=b.ajax.beforeSend;delete b.ajax.beforeSend}if(null!=b.ajax.success){var f=b.ajax.success;delete b.ajax.success}if(null!=b.ajax.error){var g=b.ajax.error;delete b.ajax.error}var j=n.extend(!0,{url:b.url,beforeSend:function(){null==c?b.body.html("
"):c(b,d)},success:function(c){d.trigger("afterLoading"),b.afterLoading(b,d,c),null==f?b.body.html(c):f(b,d,c),q.prepare_body(b,d),d.trigger("afterLoadingOnShow"),b.afterLoadingOnShow(b,d,c)},error:function(){d.trigger("errorLoading"),b.errorLoading(b,d),null==g?(b.body.html(b.errors.tpl),n(".arcticmodal-error",b.body).html(b.errors.ajax_unsuccessful_load),n(".arcticmodal-close",b.body).click(function(){return d.arcticmodal("close"),!1}),b.errors.autoclose_delay&&setTimeout(function(){d.arcticmodal("close")},b.errors.autoclose_delay)):g(b,d)}},b.ajax);b.ajax_request=n.ajax(j),d.data("arcticmodal",b)}},init:function(b){if(b=n.extend(!0,{},a,b),!n.isFunction(this))return this.each(function(){q.init_el(n(this),n.extend(!0,{},b))});if(null==b)return void n.error("jquery.arcticmodal: Uncorrect parameters");if(""==b.type)return void n.error("jquery.arcticmodal: Don't set parameter \"type\"");switch(b.type){case"html":if(""==b.content)return void n.error("jquery.arcticmodal: Don't set parameter \"content\"");var e=b.content;return b.content="",q.init_el(n(e),b);case"ajax":return""==b.url?void n.error("jquery.arcticmodal: Don't set parameter \"url\""):q.init_el(n("
"),b);}}},e={show:function(){var a=q.getParentEl(this);if(!1===a)return void n.error("jquery.arcticmodal: Uncorrect call");var b=a.data("arcticmodal");if(b.overlay.block.hide(),b.container.block.hide(),n("BODY").append(b.overlay.block),n("BODY").append(b.container.block),b.beforeOpen(b,a),a.trigger("beforeOpen"),"hidden"!=b.wrap.css("overflow")){b.wrap.data("arcticmodalOverflow",b.wrap.css("overflow"));var c=b.wrap.outerWidth(!0);b.wrap.css("overflow","hidden");var d=b.wrap.outerWidth(!0);d!=c&&b.wrap.css("marginRight",d-c+"px")}return p.not(a).each(function(){var a=n(this).data("arcticmodal");a.overlay.block.hide()}),q.transition(b.overlay.block,"show",1*")),b.overlay.block.remove(),b.container.block.remove(),a.data("arcticmodal",null),n(".arcticmodal-container").length||(b.wrap.data("arcticmodalOverflow")&&b.wrap.css("overflow",b.wrap.data("arcticmodalOverflow")),b.wrap.css("marginRight",0))}),"ajax"==b.type&&b.ajax_request.abort(),p=p.not(a))})},setDefault:function(b){n.extend(!0,a,b)}};n(function(){a.wrap=n(document.all&&!document.querySelector?"html":"body")}),n(document).bind("keyup.arcticmodal",function(d){var a=p.last();if(a.length){var b=a.data("arcticmodal");b.closeOnEsc&&27===d.keyCode&&a.arcticmodal("close")}}),n.arcticmodal=n.fn.arcticmodal=function(a){return e[a]?e[a].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof a&&a?void n.error("jquery.arcticmodal: Method "+a+" does not exist"):q.init.apply(this,arguments)}}(jQuery)}var debugMode="undefined"!=typeof debugFlatPM&&debugFlatPM,duplicateMode="undefined"!=typeof duplicateFlatPM&&duplicateFlatPM,countMode="undefined"!=typeof countFlatPM&&countFlatPM;document["wri"+"te"]=function(a){let b=document.createElement("div");jQuery(document.currentScript).after(b),flatPM_setHTML(b,a),jQuery(b).contents().unwrap()};function flatPM_sticky(c,d,e=0){function f(){if(null==a){let b=getComputedStyle(g,""),c="";for(let a=0;a=b.top-h?b.top-h{const d=c.split("=");return d[0]===a?decodeURIComponent(d[1]):b},""),c=""==b?void 0:b;return c}function flatPM_testCookie(){let a="test_56445";try{return localStorage.setItem(a,a),localStorage.removeItem(a),!0}catch(a){return!1}}function flatPM_grep(a,b,c){return jQuery.grep(a,(a,d)=>c?d==b:0==(d+1)%b)}function flatPM_random(a,b){return Math.floor(Math.random()*(b-a+1))+a}
");let k=document.querySelector(".flat_pm_modal[data-id-modal=\""+a.ID+"\"]");if(-1===d.indexOf("go"+"oglesyndication")?flatPM_setHTML(k,d):jQuery(k).html(b+d),"px"==a.how.popup.px_s)e.bind(h,()=>{e.scrollTop()>a.how.popup.after&&(e.unbind(h),f.unbind(i),j())}),void 0!==a.how.popup.close_window&&"true"==a.how.popup.close_window&&f.bind(i,()=>{e.unbind(h),f.unbind(i),j()});else{let b=setTimeout(()=>{f.unbind(i),j()},1e3*a.how.popup.after);void 0!==a.how.popup.close_window&&"true"==a.how.popup.close_window&&f.bind(i,()=>{clearTimeout(b),f.unbind(i),j()})}f.on("click",".flat_pm_modal .flat_pm_crs",()=>{jQuery.arcticmodal("close")})}if(void 0!==a.how.outgoing){let b,c="0"==a.how.outgoing.indent?"":" style=\"bottom:"+a.how.outgoing.indent+"px\"",e="true"==a.how.outgoing.cross?"":"",f=jQuery(window),g="scroll.out"+a.ID,h=void 0===flatPM_getCookie("flat_out_"+a.ID+"_mb")||"false"!=flatPM_getCookie("flat_out_"+a.ID+"_mb"),i=document.createElement("div"),j=jQuery("body"),k=()=>{void 0!==a.how.outgoing.cookie&&"false"==a.how.outgoing.cookie&&h&&(jQuery(".flat_pm_out[data-id-out=\""+a.ID+"\"]").addClass("show"),j.on("click",".flat_pm_out[data-id-out=\""+a.ID+"\"] .flat_pm_crs",function(){flatPM_setCookie("flat_out_"+a.ID+"_mb",!1)})),(void 0===a.how.outgoing.cookie||"false"!=a.how.outgoing.cookie)&&jQuery(".flat_pm_out[data-id-out=\""+a.ID+"\"]").addClass("show")};switch(a.how.outgoing.whence){case"1":b="top";break;case"2":b="bottom";break;case"3":b="left";break;case"4":b="right";}jQuery("body > *").eq(0).before("
"+e+"
");let m=document.querySelector(".flat_pm_out[data-id-out=\""+a.ID+"\"]");-1===d.indexOf("go"+"oglesyndication")?flatPM_setHTML(m,d):jQuery(m).html(e+d),"px"==a.how.outgoing.px_s?f.bind(g,()=>{f.scrollTop()>a.how.outgoing.after&&(f.unbind(g),k())}):setTimeout(()=>{k()},1e3*a.how.outgoing.after),j.on("click",".flat_pm_out .flat_pm_crs",function(){jQuery(this).parent().removeClass("show").addClass("closed")})}countMode&&(flat_count["block_"+a.ID]={},flat_count["block_"+a.ID].count=1,flat_count["block_"+a.ID].click=0,flat_count["block_"+a.ID].id=a.ID)}catch(a){console.warn(a)}}function flatPM_start(){let a=flat_pm_arr.length;if(0==a)return flat_pm_arr=[],void jQuery(".flat_pm_start, .flat_pm_end").remove();flat_body=flat_body||jQuery("body"),!flat_counter&&countMode&&(flat_counter=!0,flat_body.on("click","[data-flat-id]",function(){let a=jQuery(this),b=a.attr("data-flat-id");flat_count["block_"+b].click++}),flat_body.on("mouseenter","[data-flat-id] iframe",function(){let a=jQuery(this),b=a.closest("[data-flat-id]").attr("data-flat-id");flat_iframe=b}).on("mouseleave","[data-flat-id] iframe",function(){flat_iframe=-1}),jQuery(window).on("beforeunload",()=>{jQuery.isEmptyObject(flat_count)||jQuery.ajax({async:!1,type:"POST",url:ajaxUrlFlatPM,dataType:"json",data:{action:"flat_pm_ajax",data_me:{method:"flat_pm_block_counter",arr:flat_count}}})}).on("blur",()=>{-1!=flat_iframe&&flat_count["block_"+flat_iframe].click++})),flat_userVars.init();for(let b=0;bflat_userVars.textlen||void 0!==a.chapter_sub&&a.chapter_subflat_userVars.titlelen||void 0!==a.title_sub&&a.title_subc&&cc&&c>d&&(b=flatPM_addDays(b,-1)),b>e||cd||c-1!=flat_userVars.referer.indexOf(a))||void 0!==a.referer.referer_disabled&&-1!=a.referer.referer_disabled.findIndex(a=>-1!=flat_userVars.referer.indexOf(a)))&&(c=!0),c||void 0===a.browser||(void 0===a.browser.browser_enabled||-1!=a.browser.browser_enabled.indexOf(flat_userVars.browser))&&(void 0===a.browser.browser_disabled||-1==a.browser.browser_disabled.indexOf(flat_userVars.browser)))){if(c&&void 0!==a.browser&&void 0!==a.browser.browser_enabled&&-1!=a.browser.browser_enabled.indexOf(flat_userVars.browser)&&(c=!1),!c&&(void 0!==a.geo||void 0!==a.role)&&(""==flat_userVars.ccode||""==flat_userVars.country||""==flat_userVars.city||""==flat_userVars.role)){flat_pm_then.push(a),flatPM_setWrap(a),flat_body.hasClass("flat_pm_block_geo_role")||(flat_body.addClass("flat_pm_block_geo_role"),flatPM_ajax("flat_pm_block_geo_role")),c=!0}c||(flatPM_setWrap(a),flatPM_next(a))}}}let b=jQuery(".flatPM_sticky");b.each(function(){let a=jQuery(this),b=a.data("height")||350,c=a.data("top");a.wrap("
");let d=a.parent()[0];flatPM_sticky(this,d,c)}),debugMode||countMode||jQuery("[data-flat-id]:not([data-id-out]):not([data-id-modal])").contents().unwrap(),flat_pm_arr=[],jQuery(".flat_pm_start, .flat_pm_end").remove()}

Я не очень большой фанат компании Microsoft, однако следует признать, что они сделали действительно потрясающую среду разработки Visual Studio.

Особенно мне нравится в Visual Studio фича intellisense, которая автоматически дает подсказки по именам членов классов, функциям и полям структур, и для проектов AVR большого размера действительно предпочтительнее использовать Visual Studio IDE в сравнении с простым текстовым редактором.

Здесь приведена краткая инструкция (перевод статьи [1]) – как настроить среду Visual Studio 2008/2010 для использования тулчейна WinAVR и компилирования Ваших программ AVR для получения файлов в формате Intel Hex [2] (прошивка кода firmware микроконтроллера). Этот формат подходит для загрузки программы в память AVR/Arduino с использованием AVRDUDE и/или другого Вашего программатора (например, USBasp, AVRISP-mkII, JTAGICE mkII [3]). 

Примечание: предполагается, что у Вас уже установлены тулчейн AVR GCC (в составе пакета WinAVR или Atmel Studio), и конечно же среда разработки Microsoft Visual Studio.

[Шаг 1. Создание Makefile-проекта]

Запустите Visual Studio, зайдите в меню Файл -> Создать -> Проект…, выберите раздел Установленные шаблоны -> Visual C++ -> Проект, использующий makefile:

Введите имя проекта (Имя:), выберите папку, где будет расположен каталог проекта (Расположение:), уберите галочку “Создать каталог для решения”, кликните OK.

Запустится мастер настройки проекта (см. скриншоты).

Настройте в окне “Параметры конфигурации отладки” следующие опции:

1. Командная строка построения: make

2. Команды очистки: make clean

3. Командная строка перестроения: make all

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

4. Вывод (для отладки): имя для выходного файла прошивки. Обязательно укажите расширение файла *.hex (GenericHID.hex, к примеру).

5. Путь поиска включений: %AVR32_HOME%avrinclude

Примечание: здесь %AVR32_HOME% это переменная окружения, в которой задан каталог установки WinAVR (например, C:WinAVR-20100110) или тулчейна из Atmel Studio (например, c:Program FilesAtmelAVR ToolsAVR Toolchain). Вместо переменной окружения можно указать просто реальный путь до тулчейна.

Кликните Далее. В окне “Параметры конфигурации выпуска” поставьте галочку “Как в конфигурации отладки”. Кликните Готово.

[Шаг 2. Сконфигурируйте проект]

Среда Visual Studio автоматически создала для Вас пустой makefile-проект. Теперь его нужно немного настроить, чтобы можно было начать писать программу для AVR.

Сделайте правый клик на названии проекта (myAVRproj) в дереве Обозревателя решений, и выберите в контекстном меню Свойства. Откроется окно редактирования свойств проекта с активной конфигурацией Debug.

В разделе Свойства конфигурации -> Общие из выпадающего списка “Поддержка общеязыковой среды выполнения (CLR)” (Common Language Runtime Support (/clr)) выберите вариант Поддержка общеязыковой среды выполнения (CLR). Включение этой опции предоставляет изящную поддержку со стороны Intellisense.

Перейдите в раздел Свойства конфигурации -> NMake и убедитесь, что введенные здесь значения соответствуют необходимым командам make для сборки, очистки и перестроения (часто проекты поставляются с готовым Makefile, и команды в них могут отличаться).

Также проверьте имя выходного hex-файла и убедитесь, что пути поиска включаемых файлов соответствуют ожидаемым или добавлены в соответствующие поле ввода. В строке ввода может быть несколько путей поиска, отделенных друг от друга точкой с запятой ';'.

Если что-то не так, то исправьте.

[Шаг 3. Создание и добавление Makefile]

Создайте файл Makefile для проекта, как Вы это обычно делаете. Лично я предпочитаю использовать готовые Makefile, которые генерирует система AVR Studio, или беру готовый Makefile из разных опубликованных AVR-проектов. Например, множество проектов с отличными Makefile можно найти в составе библиотек V-USB и LUFA [4].

В этом примере я буду использовать готовый Makefile проекта USB HID устройства из библиотеки LUFA-140928. Сам проект и его makefile находятся в папке DemosDeviceClassDriverGenericHID. Сделайте копию содержимого этой папки в папку Вашего проекта, который Вы только что создали.

В моем примере папка проекта находится в каталоге c:TEMPmyAVRproj (у Вас это может быть любой другой каталог на диске).

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

Перед использованием makefile проверьте все его опции, чтобы они соответствовали Вашему компилируемому проекту. Опции makefile редактируются простым текстовым редактором. Здесь я рассмотрю в качестве примера настройку опций для микроконтроллера AT90USB162 и тактовой частоты 16 МГц (макетная плата AVR-USB162).

LUFA_PATH. здесь должен быть указан полный или относительный путь до каталога lufa-LUFA-140928/LUFA. Пример:

LUFA_PATH = c:/asm/lufa-LUFA-140928/LUFA

MCU. Здесь нужно указать тип микроконтроллера. Название микроконтроллера нужно вводить маленькими буквами. Пример:

BOARD. Здесь указывается символическое название целевого устройства, для которого компилируется проект. Для макетной платы это MICROSIN162:

F_CPU. Здесь указывается тактовая частота микроконтроллера в Герцах. Она зависит от установленного кварцевого резонатора и коэффициента деления прескалера AVR. Для приложений устройств USB на микроконтроллере AT90USB162 допустимы тактовые частоты ядра 8 или 16 МГц. Пример установки тактовой частоты 16 МГц: