Создание проекта в Eclipse для AVR

Шауэрман Александр А. shamrel@yandex.ru

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

AVR-Eclipse проект

1. Создаем сам проет. В меню "File" выбираем "New" -> "C Project".

New->C project

В открывшемся окне в строке "Project name" вводим имя нового проекта. Если установлена галочка "Use default location", то проект по умолчанию будет помещен в "workspase" (выбрали при включении) в папочке с именем проекта. Если снять галочку, то путь можно указать вручную. В окне "Project type" выбираем "AVR Cross Target Aplication" -> "Empty Project". В окне "Toolchain" должен быть активен "AVR-GCC Toolchain". Нажимаем "Next".

Empty Project

В окне "Select Configuration" снимаем галочку с пункта "Debug" (но можно и оставить), жмем "Next". В окне "AVR Target Hardware Properties" Выбираем тип микроконтроллера и вводим его рабочую основную тактовую частоту. Для учебного стенда LESO6 это ATmega128RFA1 и 16000000 (также в меню File->Properties->AVR->Targer Hardware).

AVR Target Hardware Properties

2. Добавляем файл исходного кода в проект. Если запуск первый, то окно "Welcome" следует закрыть. В окне "Project Explorer" нажимаем правой кнопкой мыши по нашему проекту, в контекстном меню выбираем "New", далее выбираем "Source File".

New->Source File

В появившемся окне вводим название нового файла, например probe.c. Хорошим тоном является называть основной файл проекта (там где содержится функция main) также как и сам проект. Не забываем про расширение «.c». В результате в проекте добавился файл "probe.c"

C sourse

Добавим код простейшей программы:

#include<avr/io.h>
int main()
{
	//! Инициализация портов для светодиодов.
	DDRF |= (1<<DDF0 | 1<<DDF1 | 1<<DDF2 | 1<<DDF3);
	PORTF |= (1<<PF0); // Зажигаем 1 светодиод.
	while(1);
}

Сохраним (Ctrl+s либо пиктограмма с дискеткой на панели инструментов). Компилируем: можно нажать на пиктограмму с молоточком на панели инструментов, либо в контекстном меню проекта (правой кнопкой на проект в окне "Project Explorer") выбрать пункт "Build Project". Для удаления результатов компиляции следует выбрать пункт "Clean Project". Результат компиляции, впрочем и любых других действий, отображается в консоли в нижнем окне. По умолчанию в этом окне может быть активирована вкладка "Problems" – тоже полезная вкладка, но лучше переключиться на вкладку "Console". Остальные вкладки можно закрыть. При необходимости они появятся сами, либо их можно активировать вручную из меню "Windows" -> "Show View".

Если компиляция прошла успешно, то в консоли мы увидим примерно следующее:

----------------
Device: atmega128rfa1
 
Program:     326 bytes (0.2% Full)
(.text + .data + .bootloader)
 
Data:          0 bytes (0.0% Full)
(.data + .bss + .noinit)
 
Finished building: sizedummy
 
10:35:10 Build Finished (took 733ms)

Иначе следует читать и исправлять ошибки. В проекте (окно "Project Explorer") добавился файл Binaries и папка "Release" (или "Debug", если при настройке проекта в выборе конфигураций не была снята галочка с Debug). В папке "Release" можно найти object файлы, makefile, файлы конфигурации eeprom и hex-файл. Двойной щелчок левой кнопки мыши откроет соответствующий файл в отдельной вкладке окна редактора.

Eclipse. Main window

3. На этом создание проекта можно считать завершенным. При компиляции создается hex-файл, настройки по умолчанию подойдут для большинства проектов, если же нет, то отредактируем параметры вручную.

Properties

Окно "Properties" ("Свойства") можно вызвать нажав сочетание клавиш "Alt+Enter", предварительно выделив проект в окне "Project Explorer", или в контекстном меню выбрав пункт "Properties". Следует отметить, что таким образом можно вызвать свойства любого файла в проекте.

Рассмотрим некоторые важные моменты. На вкладке "Resource" можно выбрать кодировку текстового редактора. Для того, чтобы русский текст в комментариях корректно отображался в различных операционных системах, рекомендуем использовать кодировку UTF-8.

На вкладке "AVR"->"AVRDude" выбираем конфигурацию и поведение программатора. Можно указать, какой hex-файл прошивать, прошивать ли EEPROM, менять ли значение Fuse-бит и многое другое. Как правило, достаточно выбрать заранее подготовленную конфигурацию, остальное оставить по умолчанию.

Если при создании проекта был неверно указан тип микроконтроллера или его тактовая частота, то изменить этот параметр можно на вкладке "AVR"->"Target Hardware". Здесь же можно проверить корректность настройки программатора, нажав кнопку "Load from MCU", в этом случае тип контроллера будет запрошен непосредственно у подключенного микроконтроллера.

В группу вкладок "C/C++ Build" сведены основные параметры компиляции и сборки проекта. Если убрать галочку "Generate Makefiles automatically" ("Автоматическая генерация make-файла), то можно указать путь к созданному вручную или сгенерированному другой программой make-файлу. "C/C++ Build" -> "Build Variables" позволяет задать дополнительные переменные, которые могут быть переданы компилятору в процессе сборки, эти переменные может использовать препроцессор. Во вкладке "C/C++ Build" -> "Environment" задаются переменные окружения, среди которых, частота процессора, тип процессора, путь до рабочего каталога, путь к утилитам сборки, путь к программатору и некоторые другие.

В пункте "C/C++ Build" -> "Settings" устанавливаются параметры, на основании которых строиться make-файл. "Additional Tools in Toolchain" – выбираем какие файлы будут сгенерированы при компиляции (hex-файл для памяти программ, hex-файл для памяти данных, листинг). Уровень оптимизации выберем, активировав "AVR Compiller" -> "Optimization". Следует понимать, что детальная настройка этих параметров требует определенного уровня компетенции, ошибка может нарушить корректную работу микроконтроллера или привести к его зависанию, а в некоторых случаях исходный код не будет скомпилирован. Вернуть настройки пункта "C/C++ Build" -> "Settings" можно нажав кнопку "Restore Defaults".

Внимание! Для того что бы комментарии на русском языке в файлах исходного кода отображались корректно, следует переключить кодировку текстового редактора с Cp1251 на UTF-8. Сделать это можно для каждого файла в отдельности, для проекта в целом, либо для всего workspace сразу. Для этого в меню "Window" выбираем "Preferences", далее "General" -> "Workspase", правим пункт "Text file encoding".

Preferences Workspace

Проект с готовым make-файлом

Что же такое make-файл? По сути своей make-файл – это текстовый файл, содержащий инструкции по компиляции отдельных модулей проекта в объектные файлы и сборки этих объектных файлов в некоторый исполняемый бинарный файл, либо hex-файл. В общем случае такой файл называется Makefile. Если проект достаточно сложный и состоит из множества директорий с исходными кодами, то make-файл разбивается на несколько отдельных файлов. Вспомогательные файлы с помощью директивы "#include" объединяются с основным. Почти все современные IDE умеют создавать make-файл автоматически, такой make-файл как правило содержит специфические параметры, привязанные к IDE и текущей операционной системе. Если же предполагается создать кросплатформенный проект не привязанный к определенной среде разработки, make-файл следует написать самому. Этот подход широко распространен в мире свободного программного обеспечения. Для компиляции такого проекта в unix-подобных системах вообще не требуется IDE, достаточно в терминале выполнить команду "make". Встраиваемые в микроконтроллер операционные системы, например FreeRTOS, Contiki собираются, используя make-файл. По такому же принципу выполнен демонстрационный проект leso6 demo1, на примере которого рассмотрим процесс создания проекта.

Все исходные коды для учебного стенда LESO6 свободно распространяются по лицензии BSD (двух пунктов) и доступны в системе git. Адрес на GitHub: www.github.com/Shamrel/leso6, можно скачать одним архивом основную ветвь. После скачивания распакуйте архив.

1. Создаем новый проет. В меню "File" выбираем "New" -> "Makefile Project with Existing Code".

New Makefile Project with Existing Code

В появившемся окне "New Project" указываем путь к директории с Makefile. Для проекта demo1 это "app/demo1" относительно корня распакованного архива. Строка "Project Name" заполнится автоматически, при желании название проекта можно изменить вручную. Исходный код мы пишем на Си, (не C++), поэтому галочку "C++" можно убрать. В окне "Toolchain for Indexer Settings" выбираем "AVR-GCC Toolchain". Жмем "Finish".

Import Existin Code

В целом импорт проекта завершен и после компиляции создастся hex-файл, пригодный для загрузки в память микроконтроллера. Как можно было заметить, мы нигде не указали среде Eclipse конкретный тип процессора и его тактовую частоту, более того, если зайти в свойства проекта, то мы не увидим пункта "AVR". Многие пункты настроек также будут отсутствовать, например в пункте "C/C++ Build" -> "Settings" нет вкладки "Tool Settings". Дело в том, что теперь все настройки среда берет из Makefile. Однако кое-что нам придется настроить: в окне проектов отображается только файл demo.c, в то время как проект включает в себя множество файлов для работы с периферией. Эти файлы расположены в папке "platform" в корне основного каталога. На работоспособность проекта это не влияет, но достаточно неудобно редактировать исходный код: осложнена навигация между файлами проекта.

Добавить путь к директории с дополнительными файлами можно в свойствах проекта. Выбираем "C/C++ General" -> "Patchs and Symbols", далее вкладка "Source Location", жмем "Link Folder...".

Properties for project

В окне "New Folder" указываем путь к директории с исходниками.

New Folder

В окне "Project Explorer" добавилась ссылка на папку "platform" со всеми исходными файлами.

Workspace

Создание проекта завершено. Загрузка hex-файла в память программ стенда с помощью программатора avrdude в статье "Настройка Eclipse для работы с avrdude".

17 января 2015

Комментарии:



Аватар пользователя Александр
#include <avr/io.h>
int main()
{
    //! Инициализация портов для светодиодов.
    DDRF |= (1<<DDF0 | 1<<DDF1 | 1<<DDF2 | 1<<DDF3);
    PORTF |= (1<<PF0); // Зажигаем 1 светодиод.
    while(1);
}

В результате:

Description    Resource    Path    Location    Type
Symbol 'DDRF' could not be resolved    proba.c  
 /proba    line 12    Semantic Error
Eclipse выдаёт семь ошибок, что DDRF, DDF0, DDF1, DDF2, DDF3, PORTF и PF0 не могут использоваться. Почему? Пользуюсь WIN XP SP3.

Скорее всего проблема с выбором чипа. По умолчанию, стоит ATMEGA16, у нее нет порта F.

Аватар пользователя Александр

Проверил установлен mmcu=atmega128rfal  и -DF_CPU=1600000UL

Смею предположить, что проект собирается удачно. Сейчас проделал все по порядку.  В корне проекта в папочку Release лежат бинарные файлы и *.hex.

Итог компиляции выводится в Console, а не в Problems. В окне Problems действительно есть ошибки, как указал автор, но они относятся не к компилятору, а к среде Eclipse,  и говорят о том, что нарушена индексация проекта. Индексация -- хоть небязательный, но очень удобный инструмент, который позволяет подсвечивать индекс и обеспечивает быстрые переходы к определению по нажатию F3. Описанная проблема появилась из-за того, что по умолчанию в новых проектах используются глобальные настройки индексера, в которых микроконтроллер ATMEGA16. Для того что бы использовались параметры текущего проекта, достаточно в свойствах проекта (C/C++ General -> Indexer) поставить галочку Enable project specific settings. Затем нужно произвести переиндексацию: правой кнопкой мыши по проекту, пункт Index -> Rebuild. Ошибка должна исчезнуть, а в тексте программы регистры DDRF и  PORTF перестанут подчеркиваться красным. Теперь, если навести мышку на этот регистр в сплывающем окне IDE покажет его значение. Если нажать F3, то перейдем к файлу с опрделением регистра.

 

Аватар пользователя Александр

Для решения проблемы, оказалось, достаточно нажать на кн. Сохранить и, несмотря на подчёркнутые красным цветом регистры, нажать на молоточек. Если ошибки останутся при первом прохождении текста компилятором, то нажать ещё раз молоточек. При повторном нажатии молоточка - всё ОК!

У меня Eclipse indigo  и JDK 1.7. Работает как-то вот так. 

Орфографическая ошибка в тексте:
Чтобы сообщить об ошибке автору, нажмите кнопку "Отправить сообщение об ошибке". Вы также можете отправить свой комментарий.