Arduino‎ > ‎

Eclipse IDE под Windows как среда программирования Arduino. Руководство 2012

24.03.2012
 
В данном руководстве я расскажу, как установить и настроить среду программирования (IDE) Eclipse, для того, чтобы с ее помощью можно было осуществлять программирование контроллера Arduino.
 
Скачать

1.       Eclipse Classic (я использовал новейшую на момент написания руководства версию 3.7.1 eclipse-SDK-3.7.1-win32.zip)

http://www.eclipse.org/downloads/

Именно Eclipse Classic, а не Eclipse IDE for C/C++ Developers. Так как при использовании последнего замечен неприятный bug с подсветкой ошибок компиляции, подсвечиваются несуществующие ошибки. Если с самого начала использовать Eclipse Classic, то таких проблем не наблюдается (о чем не говорится в других подобных руководствах).

2.       WinAVR (WinAVR-20100110-install.exe). Atmel AVR toolchain, т.е. набор необходимых пакетов программ для компиляции и генерации выполняемого кода для AVR

http://winavr.sourceforge.net/download.html

3.       Arduino IDE. Штатная среда разработки для Arduino/

http://arduino.cc/en/Main/Software

4.       Возможно для работы Eclipse понадобится дополнительно скачать и поставить Java runtime http://java.com

 

Установка среды и плагинов

1.       Установить WinAVR. Я устанавливал в папку по умолчанию C:\WinAVR-20100110, стандартно-выбранные опции.

2.       Штатная Arduino IDE у меня установлена в C:\arduino-0022

3.       Установить Eclipse Classic. В моем случае, просто распаковывается в C:\eclipse.

Запускаем Eclipse, и выбираем папку рабочего пространства (у меня C:\workspace).

 

 

4.       Теперь нам понадобится AVR Eclipse plugin (Подробная информация по установке http://avr-eclipse.sourceforge.net/wiki/index.php/Plugin_Download). Для этого в Eclipse заходим в Help->Install New Software, и жмем кнопку Add… и заполняем поля:

Name: AVR Eclipse Plugin

Location: http://avr-eclipse.sourceforge.net/updatesite/

 

Нажимаем ОК. Затем выбираем галочкой AVR Eclipse Plugin,

 

затем два раза Next, соглашаемся с GNU лицензией. Плагин скачивается и устанавливается.

 

Соглашаемся с предупреждением и одобряем перезапуск Eclipse.

5.       Необходимо доустановить Eclipse C/C++ Development Tools.

Т.е. дать возможность Eclipse работать с C/С++ проектами. Для этого опять заходим в Help->Install New Software, выбираем в поле Work with ->  --All Available Sites--, в поисковом поле ниже вбиваем “c++”. После поиска в репозиториях выбираем C/C++ Development Tools и устанавливаем по Next и далее действия аналогичный установке AVR Eclipse Plugin.

 

На этом первичная установка завершена, перейдем к настройке и попутной компиляции статической библиотеки Arduino.

 

Компиляция статической библиотеки для Arduino.

 

На данном этапе мы создадим статическую библиотеку ArduinoCore всех функций которые поддерживает IDE Arduino. Считаю, что эту библиотеку лучше скомпилировать самим с нужными опциями компиляции, оптимизирующими ее размер и размер буду использования функций. Эта библиотека потребуется в Arduino проектах в среде Eclipse, если ваш проект будет использовать функции и классы Arduino.

1.       Создаем новый C++ проект File->New->Project->C++ Project.  Next.

Project Name = ArduinoCore

Project Type = AVR Cross Target Static Libary

Toolchains = AVR-GCC Toolchain

Next, оставляем только Release конфигурацию, опять Next. Выбираем тип микроконтроллера (в моем случае это ATmega1280, у меня Arduino Mega 1280) и его частоту 16000000 Hz, Finish, ОК. 

 

Получаем дерево проекта 

 

2.       Настраиваем свойства (Properties) проекта ArduinoCore.

Project->Properties. Далее:

·         C/C++ Build-> Settings-> AVR Compiler-> Directrories-> Add... Добавить путь к исходникам ядра функций Arduino. В моем случае это C:\arduino-0022\hardware\arduino\cores\arduino

·         C/C++ Build-> Settings-> AVR Compiler-> Debugging-> Generate Debugging Info = No debugging info

 

·         C/C++ Build-> Settings-> AVR Compiler-> Optimization-> Optimization Level = Size Optimizations (-Os). ВАЖНО!!! Other Optimization Flags = -ffunction-sections -fdata-sections

Что дают эти дополнительные флаги: “при определённых опциях компилятора и линкера (в gcc есть -ffunction-sections -fdata-sections, и в ld есть --gc-sections) компилятор каждую функцию и единицу данных кладет в отдельную секцию в объектнике, а линкер потом неиспользуемые секции просто отбрасывает.” Т.е. сокращение размера бинарника проекта, использующего статическую библиотеку, собранную с этими ключами оптимизации.

 

·         C/C++ Build-> Settings-> AVR C++ Compiler  Проделываем все перечисленные выше шаги для раздела AVR C++ Compiler. Закрываем диалоговое окно свойств.

·         Теперь импортируем в проект исходные файлы нашей будущей библиотеки ArduinoCore File-> Import… -> General-> File System  Next. Выбираем директорию с исходниками C:\arduino-0022\hardware\arduino\cores\arduino. В ней выбираем все файлы, кроме main.cpp. Finish. 

 

·         Нажимаем “молоток” для сборки библиотеки. После удачной сборки можно заметить наличие предупреждений (у меня около 36). Не обращаем на это внимание. Полученная библиотека libArduinoCore.a (в моем случае около 60 Kbyte) располагается в c:\workspace\ArduinoCore\Release\

Настрока AVRDude в Eclipse

Как подсказывает Wiki, AVRDude - кросплатформенная свободная консольная программа, предназначенная для прошивки микроконтроллеров фирмы Atmel серии AVR. Утилита входит в комплект тулчейна WinAVR и позволяет прошивать в том числе контроллеры Arduino через стандартное USB-подключение.

1.       Window-> Preference-> AVR-> AVRDude-> Programmer configurations-> Add…

Выбираем программатор (Arduino) и вписываем используемы порт (у меня COM4) и скорость 57600. И вписываем Configuration name = AVRDude for Arduino, например. Жмем OK.

 

 

Внимание! Для заливки в Arduino Mega 2560! программы из Eclipse нужно заменить Avrdude пакета WinAVR файлы из среды Arduino:

1. Найти в C:\arduino-0022\hardware\tools\avr\bin файл avrdude.exe и скопировать его в C:\WinAVR-20100110\bin (там уже есть файл с таким названием, можно старый переименовать или скопировать с заменой)

2. Найти в C:\arduino-0022\hardware\tools\avr\etc файл avrdude.conf и скопировать его в C:\WinAVR-20100110\bin (там уже есть файл с таким названием, можно старый переименовать или скопировать с заменой)ф

3.  Для Arduino Mega 2560, Avrdude настраивается следующим образом (программатор -сstj500v2)

После этого можно воспользоваться либо коммандным файлом C:\Dropbox\ТЗПП2\prjStepper\Arduino\_Eclipse\ARVDude_Arduino2560_port22.cmd либо из Eclipse прошивать.

Создание C++ проекта для Arduino в Eclipse. Шаблон проекта.

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

1.       Создаем новый C++ проект File-> New-> C++ Project. Next.

Project Name = MotorKnob

Project Type = AVR Cross Target Application-> Empty project

Toolchains = AVR-GCC Toolchain

Next, оставляем только Release конфигурацию, опять Next. Выбираем тип микроконтроллера (в моем случае это ATmega1280, у меня Arduino Mega 1280) и его частоту 16000000 Hz, Finish, ОК.

 

 

Получаем дерево проекта 

 

2.       Настраиваем свойства (Properties) проекта MotorKnob. Для этого нужно выделить проект в дереве, и далее Project->Properties.

·         C/C++ Build-> Settings-> Additional Tools in Toolchain Помечаем

o   Generate HEX file for Flash memory

o   Print Size

o   AVRDude

Галочка AVRDude позволит автоматически загружать проект в контроллер после сборки. 

·         C/C++ Build-> Settings-> AVR Compiler  Command = avr-gcc

·         C/C++ Build-> Settings-> AVR Compiler-> Directrories-> Add... Добавить путь к исходникам функций Arduino. В моем случае это C:\arduino-0022\hardware\arduino\cores\arduino

·         C/C++ Build-> Settings-> AVR Compiler-> Debugging-> Generate Debugging Info = No debugging info

·         C/C++ Build-> Settings-> AVR Compiler-> Optimization-> Optimization Level = Size Optimizations (-Os). ВАЖНО!!! Other Optimization Flags = -ffunction-sections -fdata-sections

 

·         C/C++ Build-> Settings-> AVR C++ Compiler  Command = avr-g++

·         C/C++ Build-> Settings-> AVR C++ Compiler-> Directrories-> Add... Добавить путь к исходникам функций Arduino. В моем случае это C:\arduino-0022\hardware\arduino\cores\arduino

·         C/C++ Build-> Settings-> AVR C++ Compiler-> Debugging-> Generate Debugging Info = No debugging info

·         C/C++ Build-> Settings-> AVR C++ Compiler-> Optimization-> Optimization Level = Size Optimizations (-Os). ВАЖНО!!! Other Optimization Flags = -ffunction-sections -fdata-sections

 

·         Конфигурация линковщика. C/C++ Build-> Settings-> AVR C++ Linker

В поле Command нужно вместо avr-g++ прописать avr-gcc

Command line pattern = ${COMMAND} --cref -s -Os ${OUTPUT_FLAG}${OUTPUT_PREFIX}${OUTPUT} ${INPUTS} -lm ${FLAGS}

Также нужно добавить в C/C++ Build-> Settings-> AVR C++ Linker-> General

в поле Other Arguments = -Wl,-gc-sections. Это должно существенно уменьшить размер HEX-файла.

 

 
Суммарно будет выглядеть так
 
 

·         C/C++ Build-> Settings-> AVR C++ Linker-> Libraries-> Add…

Добавляем статическую библиотеку ArduinoCore, которую мы собирали ранее. Добавляем имя “ArduinoCore” и путь к ней (например из рабочего пространства Workspace). Хочу обратить внимание, что вписывать необходимо именно “ArduinoCore”, а не libArduinoCore, т.е. без приставки lib

 

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

·         Привяжем ранее созданную конфигурацию AVRDude for Arduino к нашему проекту. AVR-> AVRDude-> Programmer configuration = AVRDude for Arduino (выбирается из выпадающего списка)

 

·         И напоследок проверим настройки целевой платформы AVR-> Target Hardware

 

3.       Создаем в проект main.cpp файл File->New-> Source File.  Next.

 

·         Вставляем в него содержимое файла C:\arduino-0022\hardware\arduino\cores\arduino\main.cpp, т.е. используем шаблон Arduino программы. Обратите внимание на обязательный заголовочный файл WProgram.h

 

#include <WProgram.h>

int main(void)

{

               init();

               setup();

               for (;;)

                               loop();

               return 0;

}

 

·         Затем вставляем в main.cpp нашего проекта MotorKnob содержимое скетча MotorKnob.pde

Заменим #include <Stepper.h> на #include "Stepper.h".

·         Так как в скетче используется библиотека Stepper.c, то дополнительно необходимо импортировать исходники Stepper.c и Stepper.h в наш проект. File-> Import… -> General-> File System  Next. Выбираем директорию с исходниками C:\arduino-0022\libraries\Stepper. Далее выбираем галочками необходимые файлы. Finish.

 

·         Возможно в main.cpp, понадобится добавить функцию __cxa_pure_virtual, как написано в других руководствах.

extern "C" void __cxa_pure_virtual()

{

        cli();

        for (;;);

}

Но в моем случае заработало без нее.

Comments