Настройка Eclipse для работы с Arduino Uno
Преамбула
У меня дома стоит масляное отопление. Для измерения уровня масла в баке используется допотопный датчик со стрелкой и поплавком на веревке. Принцип работы датчика поражает свой неточностью. Но так как мы с вами живем в далеком будущем, по отношению к моему детству, то мне захотелось сделать датчик, который выполняет следующие условия:
Можно было, конечно, перейти на горячо любимую Visual Studio, но в данный момент я открываю заново для себя линукс, поэтому виндоуса нет в наличии.
Сегодня, я хочу поделиться с вами о том, как настроить Eclipse для работы с Arduino Uno под Ubuntu 10.10.
Что нам нужно
Софт
Альтернативно можно в терминале написать:
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» вводим:
1.4 Установку GNU AVR-GCC toolchain выполняем из терминала. Для этого вставляем в терминал строчку:
Жмем 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 и ставим галочки напротив
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:
Создаем main.cНу вот мы и добрались до заветного main файла. Как мы помним из Arduino IDE, там нам надо создать две функции и все работает (setup и loop). В нашем проекте нам надо написать больше кода и я предлагаю просто создать в проекте новый файл с именем main.c (File → New → Source File). И вставить в него следующий код:
Вставив код, нам осталось только построить наш проект. Но думаю что с этим вы справитесь сами. И еще, в предложенном варианте, размер HEX файла соперничает с оригинальной средой разработки для Arduino.
У меня дома стоит масляное отопление. Для измерения уровня масла в баке используется допотопный датчик со стрелкой и поплавком на веревке. Принцип работы датчика поражает свой неточностью. Но так как мы с вами живем в далеком будущем, по отношению к моему детству, то мне захотелось сделать датчик, который выполняет следующие условия:
- Датчик должен быть цифровым.
- Его показания должны сохранятся для последующей обработки.
- Данные должны быть доступны для меня всегда и везде.
- Все устройство должно быть дешевле 200€.
Можно было, конечно, перейти на горячо любимую 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 порт в компьютере.
Альтернативно можно в терминале написать:
<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»
Ставим галочку
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.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 комментариев