Настройка Eclipse для работы с Arduino Uno

Преамбула
У меня дома стоит масляное отопление. Для измерения уровня масла в баке используется допотопный датчик со стрелкой и поплавком на веревке. Принцип работы датчика поражает свой неточностью. Но так как мы с вами живем в далеком будущем, по отношению к моему детству, то мне захотелось сделать датчик, который выполняет следующие условия:
  • Датчик должен быть цифровым.
  • Его показания должны сохранятся для последующей обработки.
  • Данные должны быть доступны для меня всегда и везде.
  • Все устройство должно быть дешевле 200€.
Вот с такой спецификацией я и начал поиск подходящих компонентов. Выбор довольно быстро упал на платформу Arduino. Само железо устраивало меня полностью, но вот среда разработки была просто ужасна. Поэтому было принято решение перейти на Eclipse.

Можно было, конечно, перейти на горячо любимую Visual Studio, но в данный момент я открываю заново для себя линукс, поэтому виндоуса нет в наличии.

Сегодня, я хочу поделиться с вами о том, как настроить Eclipse для работы с Arduino Uno под Ubuntu 10.10.
Что нам нужно
Софт
  • ПК с установленной Ubuntu 10.10
  • Eclipse IDE, я использовал версию 3.5.2
  • C Development Toolkit, я использовал версию 6.0.2
  • AVR Plugins for Eclipse, я использовал версию 2.3.4
  • GNU AVR-GCC toolchain
  • Arduino IDE, я пользовал версию 0022
Железо
  • Arduino Uno
  • USB кабель для плдключения Arduino к компу
  • Свободный USB порт в компьютере.
Установка софта1.1 Ставим Eclipse, для этого идем в Ubuntu Software Center, вводим в поиске слово «Eclipse», в строчке Eclipse нажимаем кнопку «Install».

Альтернативно можно в терминале написать:
<b>sudo apt-get install eclipse-platform</b>


1.2 Устанавливаем C Development Toolkit. Для этого открываем Eclipse, идем в меню Help, потом кликаем на «Install New Software…».

Открывается окно. В поле «Work with» выбираем страницу «Galileo Update Site».

В поле поиска вставляем строчку «Eclipse C/C++ Development Tools»



Ставим галочку раком левее результата поиска, т.е. напротив строчки »Eclipse C/C++ Development Tools» и жмем Next, потом опять Next, Accept, Finish. После этого супер-комбо, начнется установка CDT. После установки, перезапускаем Eclipse.

1.3 Устанавливаем AVR Plugins. Открываем окошко «Install New Software», кликаем на кнопку «Add…», для ввода адреса откуда брать плагин. Вводим в поле Name «AVR plugins for Eclipse», a в поле «Location» вводим:
http://avr-eclipse.sourceforge.net/updatesite/
и жмем OK. Отмечаем строчку «AVR Eclipse Plugin» и выполняем комбо из шага 1.2. Закрываем Eclipse.

1.4 Установку GNU AVR-GCC toolchain выполняем из терминала. Для этого вставляем в терминал строчку:
sudo apt-get install avrdude binutils-avr gcc-avr avr-libc gdb-avr

Жмем Enter и немного ждем.

Настройка EclipseПосле установки всех нужных плагинов для Eclipse, нам надо настроить AVRDude. Для этого идем в Eclipse, в меню настройки (Window → Prefrences).

Пишем в строке поиска «AVRDude» жмем Enter и видим следующее окно.



жмем кнопку «Add» и добавляем новую конфигурацию для программатора. Для этого в открывшемся окне меняем имя и описание конфигурации (для порядка). Выбираем Arduino в списке «Programmer Hardware (-c)». В поле «Override default baudrate (-b)» выбираем значение 115200 а в поле «Override default port (-P)» должно стоять значение /dev/ttyACM0 (Порт к которому подключен Arduino, может отличатся от моего. Подсмотреть значение порта можно в Arduino IDE).



Жмем OK. Потом еще раз OK.

Создаем проект для ArduinoДля первого проекта нам придется настроить проект ручками. Поэтому я рекомендую создать этот проект как «базовый» проект для Arduino, а потом копировать его по необходимости.

2.1 В Eclipse, идем в меню (File → New → Project…), выбираем «C Project» и кликаем Next.

2.2 Называем дитя, в моем случае ArduinoUno и выбираем тип проекта, у нас должен быть «AVR Cross Target Application«. Кликаем Finish.

2.3 Выбираем наш проект в окне «Project Explorer» и идем менять настройки проекта (Project → Properties). В левой области открывшегося окна находим закладку AVR, разворачиваем ее.

2.4 Кликаем на AVRDude, выбираем конфигурацию программатора (мы создали ее ранее).

2.5 Подключаем Arduino к компу при помощи USB кабеля. Убеждаемся что Arduino включен.

2.6 Слева кликаем на Target Hardware. Справа видим кнопку «Load from MCU», нажимаем ее. MCU Type и частота должны изменится на подходящие к вашему микроконтроллеру. Сверяем тип с надписью на кристалле, если совпадает — хорошо. Если автоматически опознать контроллер не удается, курим описание к железу и выставляем значения руками. В случае с Uno тип опознается как ATmega328P и частота 16МГц.

2.7 Закрываем окно Properties, нажав на OK.

Создаем библиотеку для Arduino UnoДля каждого проекта с Arduino нам понадобится библиотека ядра. Есть несколько способов ее достать, самый быстрый это вытянуть его из оригинальной среды разработки Arduino. Чем мы сейчас и займемся.

3.1 Стартуем Arduino IDE

3.2 Выбираем наше железо (Tools → Board → …) В данном примере выбираем Arduino Uno.

3.3 Загружаем любой пример кода, например Blink (File → Examples → Basics → Blink).

3.4 Жмем на кнопку Verify

3.5 Теперь идем в папку где лежит нужная нам библиотека. Искать ее надо в папке /tmp/buildXXXXXXXX.tmp/ где XXXXXXXXX — куча цифр. Если таких папок несколько, стираем все директории и goto 3.4

3.6 Переименовываем файл core.a в libArduinoUnoCore.a

3.7 Перетаскиваем файл в наш Eclipse проект и бросаем его туда.

Настраиваем билдТеперь осталось только сделать несколько настроек для успешного билда и все готово.

4.1 В Eclipse нажимаем Alt + Enter и попадаем в настройки проекта.

4.2 Идем в ветку C/C++ (Build → Settings). В закладке Tool Settings выбираем пункт Additional Tools in Toolchain и ставим галочки напротив
  • Generate HEX file for Flash memory
  • Print Size
  • AVRDude
4.3 Убираем галочку у пункта Generate Extended Listing. Получается вот так:


4.4 Идем в закладку AVR Compiler, кликаем на нее и меняем значение поля Command с «avr-gcc» на «avr-g++».

4.5 Далее идем в ветку AVR Compiler → Directories, добавляем путь где можно будет найти заголовочные файлы к нашей libArduinoUnoCore.a. Нужный нам путь лежит в папке с Arduino IDE. У меня …/arduino-0022/hardware/arduino/cores/arduino/ (многоточие заменить на ваш путь до IDE). Вот этот путь мы и указываем компилятору.

4.5 Далее идем в ветку AVR Compiler → Debugging, выставляем значение Generate Debugging Info на No debugging Info.

4.6 Идем в ветку AVR Compiler → Optimization, выставляем значение Optimization Level на Size Optimizations (-Os)

4.7 В ветке AVR Assembler → Debugging, выставляем значение Generate Debugging Info на No debugging Info.

4.8 В ветке AVR C Linker → General, в поле Other Arguments пишем «–cref -Wl,–gc-sections». Это должно уменьшить HEX файл раза в четыре.

4.9 И последние штрихи в AVR C Linker → Libraries:
  • Добавляем библиотеку «ArduinoUnoCore» в Libraries (-l)
  • Добавляем путь в Libraries Path (-L), в этом проекте «${workspace_loc:/ArduinoUno}«
получается вот так:


Создаем main.cНу вот мы и добрались до заветного main файла. Как мы помним из Arduino IDE, там нам надо создать две функции и все работает (setup и loop). В нашем проекте нам надо написать больше кода и я предлагаю просто создать в проекте новый файл с именем main.c (File → New → Source File). И вставить в него следующий код:
/*
* main.c
*
* Created on:     12.01.2011
*
* Basic main file for the Arduino Project.
*/
#include «WProgram.h»
// Global variables
int g_LedPin = 13; // LED on digital pin 13
void setup()
{
  // opens serial port, sets data rate to 9600 bps
  Serial.begin(9600);
  // sets the pin as output
  pinMode(g_LedPin, OUTPUT);
  Serial.println("*******************");
  Serial.println("*  hello world  *");
  Serial.println("*******************");
}
void loop()
{
  digitalWrite(g_LedPin, HIGH);    // set the LED on
  delay(1000);                     // wait for a second
  digitalWrite(g_LedPin, LOW);     // set the LED off
  delay(1000);                     // wait for a second
}
extern «C» void __cxa_pure_virtual()
{
  while(1);
}
int main(void)
{
  init();
  setup();
  //endless loop
  for (;;)
  {
     loop();
  }
  return 0;
}

Вставив код, нам осталось только построить наш проект. Но думаю что с этим вы справитесь сами. И еще, в предложенном варианте, размер HEX файла соперничает с оригинальной средой разработки для Arduino.


0 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.