В этой статье мы рассмотрим шаги, которые нужно предпринять, чтобы получить рабочую среду ECLIPSE для программирования микроконтроллеров архитектуры Atmel AVR на языке Си в Linux (Ubuntu).
Необходимый минимум программного обеспечения
Для написания программ и прошивки микроконтроллеров понадобится:
gcc-avr - это компилятор, он будет осуществлять кросс-компиляцию кода программы на языке Си для архитектуры микроконтроллеров AVR.
binutils-avr - ассемблер, компоновщик и некоторые полезные утилиты.
avr-libc - стандартная библиотека Си для Atmel AVR.
avrdude - утилита для программирования микроконтроллеров .
gcc-avr - это компилятор, он будет осуществлять кросс-компиляцию кода программы на языке Си для архитектуры микроконтроллеров AVR.
binutils-avr - ассемблер, компоновщик и некоторые полезные утилиты.
avr-libc - стандартная библиотека Си для Atmel AVR.
avrdude - утилита для программирования микроконтроллеров .
Для отладки дополнительно нужны следующие пакеты:
gdb-avr - отладчик для AVR.
avarice - интерфейс между avr-gdb и AVR JTAG ICE.
simulavr - симулятор Atmel AVR.
Чтобы установить нужные программные пакеты, откроем терминал и выполним следующую команду:
sudo apt-get install gcc-avr binutils-avr avr-libc avrdude gdb-avr avarice simulavr
В принципе, установленный таким образом набор программ достаточен чтобы заниматься разработкой для AVR, используя любой текстовый редактор. Но большинству пользователей, наверняка, хотелось бы использовать удобную графическую Среду Разработки, позволяющую писать код, компилировать, отлаживать и загружать его в микроконтроллер.
ИНТЕГРИРОВАННАЯ СРЕДА РАЗРАБОТКИ Eclipse
Мы установим мощную IDE Eclipse, которую сможем использовать не только для программирования микроконтроллеров на Си, но и при желании, и для написания программ практически на любом другом языке. Eclipse - это инструмент использующий плагины, написанный на Java.
Нам понадобится базовый пакет eclipse и инструменты разработчика на C/C++ eclipse-cdt. Устанавливаем:
sudo apt-get install eclipse eclipse-cdt
Запустим Eclipse и добавим плагин для удобной работы с AVR, который, помимо всего прочего, обеспечит нам возможность работать с различными моделями программаторов. При запуске Eclipse попросит указать директорию, где будут храниться исходники проектов, выбирайте любое имя на свое усмотрение (директория не должна существовать, Eclipse создаст ее самостоятельно). После того, как Eclipse запустился, пройдем по меню
Help -> Install new software... -> Add...
Нам предлагают ввести URL репозиторя, содержащего нужный нам плагин. Узнать URL можно, посетив сайт marketplace.eclipse.org. Забьем в строку поиска "AVR" и найдем AVR Eclipse Plugin. На странице плагина нужно догадаться кликнуть по зеленой стрелочке, чтобы получить URL репозитория: http://avr-eclipse.sourceforge.net/updatesite/.
Копируем этот URL в поле "Location" в оконе "Add repository" Eclipse, жмем "Ok". Eclipse подгрузит список доступного ПО из репозитория, отмечаем чекбокс напротив AVR Eclipse Plugin и жмем "Next".
Последующие шаги мастера установки проходим, ни от чего не отказываясь. После установки плагина Eclipse захочет перезапуститься, в наших интересах ему это позволить. IDE готова к работе. Теперь разберемся с программатором.
ПОДКЛЮЧАЕМ ПРОГРАММАТОР
Подключим программатор, который есть под рукой. Допустим, у нас оказался AVR-910. После втыкания программатора в разъем USB, у нас появится новое устройство /dev/ttyUSB0.
Посмотрим, сможем ли мы с ним работать, хватит ли у нас прав:
ls -l /dev/ttyUSB0
crw-rw---- 1 root dialout 188, 0 окт. 22 14:49 /dev/ttyUSB0
Мы видим, что для устройства заданы разрешения на чтение и запись для пользователя root и группы dialout. Пользователи, не входящие в эту группу, работать с устройством не смогут.
crw-rw---- 1 root dialout 188, 0 окт. 22 14:49 /dev/ttyUSB0
Мы видим, что для устройства заданы разрешения на чтение и запись для пользователя root и группы dialout. Пользователи, не входящие в эту группу, работать с устройством не смогут.
Добавим себя в эту группу:
sudo usermod -a -G dialout `whoami`
(команду whoami - пишите именно так, в обратных кавычках)
sudo usermod -a -G dialout `whoami`
(команду whoami - пишите именно так, в обратных кавычках)
Теперь завершим текущий пользовательский сеанс и войдем снова, чтобы членство в группе dialout стало актуальным.
Теперь запускаем Eclipse...
ВАШ ПЕРВЫЙ ПРОЕКТ НА ECLIPSE
...попробуем создать проект:
File -> New -> C Project
Придумаем имя проекта и выберим тип - AVR Cross Target Application -> Empty Project. Жмем "Finish", и переходим к настройкам проекта - в панели Project Explorer жмем правой кнопкой мыши на нашем проекте и выбираем "Properties" в выпавшем меню. Нас интересуют вкладки "AVR" и "C/C++ Build".
Сначала идем в AVR -> AVRDude -> Programmer -> Programmer Configuration -> New... . Придумываем имя нашему программатору (например, AVR-910). Теперь нужно выбрать тип программатора. В списке доступных типов мы не находим ничего, похожего на 910. Поэтому кликаем все подряд. Когда доберемся до "Atmel Low Cost Serial Programmer", то увидим в окошке справа:
id = "avr910";
desc = "Atmel Low Cost Serial Programmer";
type = avr910;
Это то, что нужно, оставляем этот выбор. Теперь выберем устройство, как мы помним, у нас это /dev/ttyUSB0. Записываем это в поле "Override default port". Это все, жмем "Ok". И устанавливаем только что созданный профиль в качестве значения в поле "Programmer configuration". Идем дальше.
AVR -> Target Hardware -> MCU Type. Если программатор подключен к макетной плате с микроконтроллером (или микроконтроллер воткнут в программатор), то пробуем нажать "Load from MCU". Если тип микроконтроллера прочитался корректно, то скорее всего, тип программатора на предыдущем шаге мы выбрали верно. Если это не так, то нужно еще раз проверить выставленный тип программатора, его работоспособность, наличие контакта на макетке. Устанавливаем MCU Clock Frequency в то значение, которое у нас имеется.
Можно еще походить по вкладкам AVR -> AVRDude -> ... и обнаружить настройки чтения и записи Fuse и Lock-битов и некоторые другие опции, но пока нам это не нужно и мы идем дальше.
Вкладка C/C++ Build -> Settings -> AVR Compiler -> Miscellaneous -> Other flags - добавляем опцию -g для того, чтобы в ассемблерном листинге мы смогли видеть исходные строки на Си. Посмотрите другие разделы C/C++ Build -> Settings -> AVR Compiler - тут можно установить настройки оптимизации компилятора и другие полезные параметры.
Сохраняем изменения в параметрах проекта и добавим одно полезное сочетание клавиш в нашу IDE: Window -> Preferences -> General -> Keys ищем команду Upload Progect и назначаем сочетание клавиш (например, Ctrl+Alt+U). И там же мы видим, что на комаду Build All уже назначено сочетание Shift+Ctrl+B. Эти две комбинации мы будем вызывать для перекомпиляции исходников и прошивки микроконтроллера.
Теперь нам осталось создать файл main.c , написать тестовую программу скомпилировать ее и прошить железку.
Придумаем имя проекта и выберим тип - AVR Cross Target Application -> Empty Project. Жмем "Finish", и переходим к настройкам проекта - в панели Project Explorer жмем правой кнопкой мыши на нашем проекте и выбираем "Properties" в выпавшем меню. Нас интересуют вкладки "AVR" и "C/C++ Build".
Сначала идем в AVR -> AVRDude -> Programmer -> Programmer Configuration -> New... . Придумываем имя нашему программатору (например, AVR-910). Теперь нужно выбрать тип программатора. В списке доступных типов мы не находим ничего, похожего на 910. Поэтому кликаем все подряд. Когда доберемся до "Atmel Low Cost Serial Programmer", то увидим в окошке справа:
id = "avr910";
desc = "Atmel Low Cost Serial Programmer";
type = avr910;
Это то, что нужно, оставляем этот выбор. Теперь выберем устройство, как мы помним, у нас это /dev/ttyUSB0. Записываем это в поле "Override default port". Это все, жмем "Ok". И устанавливаем только что созданный профиль в качестве значения в поле "Programmer configuration". Идем дальше.
AVR -> Target Hardware -> MCU Type. Если программатор подключен к макетной плате с микроконтроллером (или микроконтроллер воткнут в программатор), то пробуем нажать "Load from MCU". Если тип микроконтроллера прочитался корректно, то скорее всего, тип программатора на предыдущем шаге мы выбрали верно. Если это не так, то нужно еще раз проверить выставленный тип программатора, его работоспособность, наличие контакта на макетке. Устанавливаем MCU Clock Frequency в то значение, которое у нас имеется.
Можно еще походить по вкладкам AVR -> AVRDude -> ... и обнаружить настройки чтения и записи Fuse и Lock-битов и некоторые другие опции, но пока нам это не нужно и мы идем дальше.
Вкладка C/C++ Build -> Settings -> AVR Compiler -> Miscellaneous -> Other flags - добавляем опцию -g для того, чтобы в ассемблерном листинге мы смогли видеть исходные строки на Си. Посмотрите другие разделы C/C++ Build -> Settings -> AVR Compiler - тут можно установить настройки оптимизации компилятора и другие полезные параметры.
Сохраняем изменения в параметрах проекта и добавим одно полезное сочетание клавиш в нашу IDE: Window -> Preferences -> General -> Keys ищем команду Upload Progect и назначаем сочетание клавиш (например, Ctrl+Alt+U). И там же мы видим, что на комаду Build All уже назначено сочетание Shift+Ctrl+B. Эти две комбинации мы будем вызывать для перекомпиляции исходников и прошивки микроконтроллера.
Теперь нам осталось создать файл main.c , написать тестовую программу скомпилировать ее и прошить железку.
Можно посмотреть ассемблерный листинг получившегося кода, открыв файл <имя проекта>.lss, который появится в директории "Debug" или "Release" в проекте (в зависимости от текущего профиля) после компиляции.
___
Комментариев нет:
Отправить комментарий