Miércoles 30 Junio 2010

Seguimos con Eclipse+Arduino PDF Imprimir Email
Escrito por Raúl Milla
Miércoles, 30 de Junio de 2010 18:32

Bueno, ahora vamos a explicar como crear una aplicación y subirla a Arduino únicamente usando Eclipse. Para hacer uso del siguiente ejemplo/tutorial hemos de tener todo configurado como en el articulo anterior.

Inicialmente tendremos que crear la configuración de "avrdude", que es el programa que sube los .hex a Arduino, desde el IDE de Arduino, para ello simplemente tenemos que copiar el fichero "arduino/hardware/tools/avrdude.con" a "usr/local/etc".

Ahora abrimos nuestro Eclipse y creamos un proyecto nuevo, aunque en esta ocasión pincharemos "AVR Cross Target Application". En las propiedades del proyecto configuramos los siguientes parámetros,

AVR > AVRDude (panel de la derecha) > New
Programmer Hardware (-c) = "Atmel STK500 Version 1.x firmware"
Override default port (-P) = /dev/ttyUSB0 (en mi caso)
Override default baudrate (-b) = 57600
AVR > Target Hardware MCU ATmega328P y MCU CLock Frequency 16000000
C/C++ Build > Setting > (panel de la derecha) > Additional Tools in Toolchain > Checkear solamente "Generate HEX file for Flash memory" y "Print Size"
C/C++ Build > Setting > (panel de la derecha) > AVR Assembler > Debugging > No debugging info
C/C++ Build > Setting > (panel de la derecha) > AVR Compiler > Directories > Los directorios donde están los headers
C/C++ Build > Setting > (panel de la derecha) > AVR Compiler > Debugging > No debugging info
C/C++ Build > Setting > (panel de la derecha) > AVR Compiler > Optimization > Size Optimizations
C/C++ Build > Setting > (panel de la derecha) > AVR C++ Compiler > Directories > Los directorios donde están los headers
C/C++ Build > Setting > (panel de la derecha) > AVR C++ Compiler > Debugging > No debugging info
C/C++ Build > Setting > (panel de la derecha) > AVR C++ Compiler > Optimization > Size Optimizations
C/C++ Build > Setting > (panel de la derecha) > AVR C++ Linker > Objects > Other Objects (*.o) > Aquit tienes que poner las librerías compiladas *.a y *.o a las que hacen referencia los headers
Este último paso me mareo bastante, puesto que en todos sitios dicen que el parametro que se tiene que configurar es Libraries cuando en realidad es Objects.

Ahora podemos escribir nuestro código teniendo en cuenta lo siguiente,
detras de los includes es necesario poner esta función,
extern "C" void __cxa_pure_virtual()
{
while(1);
}

La estructura principal debería seguir este patrón,
int main(void)
{
init();
setup();
for (;;)
loop();
return 0;
}

Las funciones setup() y loop() la definimos y desarrollamos antes del int main(void), y son las funciones que hacen referencia a la que nos podemos encontrar en el IDE oficial de Arduino.

Ahora le damos al martillo y no deberíamos tener ningún problema en la compilación. Lo único que nos queda es subir nuestro programa a Arduino. Para ello, el Plugins de AVR crea un bontón en el Eclipse, presionamos el reset de la placa y acto seguido le damos al botón. Si todo ha salido bién debería volcar el programa a Arduino y este ponerse a funcionar.

Si en nuestro programa tenemos alguna traza por el puerto serie podemos abrir el Terminal como explicamos en el articulo anterior y ver como Arduino está totalmente integrado en nuestro Eclipse.

Espero que les haya gustado. Un saludo y hasta la próxima.
Leer más...
Actualizado ( Miércoles, 30 de Junio de 2010 18:45 )




Lunes 28 Junio 2010

Configurando Eclipse para Arduino... PDF Imprimir Email
Escrito por Raúl Milla
Lunes, 28 de Junio de 2010 18:40

Hola amigos, voy a intentar explicar un poco mi experiencia personal y los pasos que he seguido para conseguir compilar, subir y ver la salida del puerto serie de Arduino usando Eclipse, un IDE exepcional.

Para empezar me gustaría comentar los motivos por lo que he decidido empezar a desarrollar para Arduino usando Eclipse. En primer lugar decir que el IDE de Arduino está bien en la mayoría de los casos pero cuando uno intenta hacer una librería empieza a ver algunos problemas. Cuando empezé a desarrollar ArCan en cada prueba que hacía tenía que,
1º Cerrar el IDE.
2º Borrar la versión compilada anterior.
3ºCopiar los archivos a las carpetas correspondientes.
4º Reabrir el IDE para que este intentase compilar la nueva versión.

Todo este problema se debe a que el entono de desarrollo de Arduino compila las librerías, que no lo están, cuando se inicia la aplicación, como entendereis esto es un rollo. También estaba la opción de teclear los comandos a mano o hacer algún pequeño script de compilación pero tampoco es una idea que me atrajese en aquel momento. En segundo lugar, Eclipse nos da muchas ventajas, tiene un montón de plugins y funciona perfectamente con Sub-version, además tiene el estupendo "autocompletar", que para quien no lo conozca, lo que hace es que al pulsar "Ctrl+Espacio" el solo adivina que querías poner y aunque parezca increible funciona bastante bien, haciendo que la programación sea mucho más rápida. Esto y algunas otras razones hacen de Eclipse un IDE muy interesante para tabajar con Arduino. De hecho confio tanto en él que no me extrañaría que un futuro todo se redujese a plugins de Eclipse para programar en cualquier lenguaje y/o entorno

En la web oficial de Arduino podemos encontrar una pequeña guía de como realizar la configuración, me ha servido bastante, aunque en mi caso me encontré algunos fallos, además está en ingles que es un incoveniente para algunas personas. Vamos a empezar con el Tutorial.

Lo primero, evidentemente, es descargarse Eclipse si no lo tienes y después el AVR Plugins for Eclipse. En teoría la instalación automática de este último no funciona... o eso dicen en la web de Arduino, pero he encontrado muchos tutoriales en ingles que lo instalan automáticamente y si que les funciona, yo en mi caso hice la instalación de forma manual. Basta con copiar la carpeta "Plugins" y "features" a la carpeta de Eclipse, en linux está en "/home/user/.eclipse/org.eclipse..../".

Otra herramienta importante que deberíamos tener es un monitor del puerto serie integrado en Eclipse, para poder sacar trazas, enviar datos o cualquier otro uso que le queramos dar, para ello instalamos Target Managerment Project, su instalación es muy sencilla, desde Eclipse, pinchamos Ayuda>Install New Software, añadimos un repositorio nuevo, http://download.eclipse.org/releases/galileo/ y lo encontramos dentro de "Mobile and Device Developement".

Pero aún no podremos usar el puerto serie, para ello necesitamos installar la librería RXTX, lo hacemos de la misma forma que el Target Managerment Project, añadimos el repositorio "http://rxtx.qbang.org/eclipse/" e instalamos la última versión que tengamos disponibles. Despues de hacer todo esto tampoco abremos terminado, por algún problema con la librería que incluye RXTX cuando intentamos enviar o recibir algo por el puerto serie usando el terminal en Eclipse todo hace "Crash", y de los gordos, este a sido uno de los mayores problema que he encontrado, la forma de solucionarlo es copiando la librería rxtx que usa el IDE de Arduino a nuestro sistema, Concretamente debemos sustituir la que encontramos en "/usr/lib/librxtxSerial-2.1-7.so" por "arduino/.lib/librxtxSerial-2.1-7.so". Una vez hecho esto no deberíais tener más problemas para usar el monitor de puerto serie. La forma de cargarlo es pinchando en "Ventana>Mostrar perspectiva>Terminal>Terminal" y configuramos nuestro puerto serie, le damos a conectar y listo.

A continuación instalamos todas las herramientas de desarrollo necesarias para AVR, si estamos en Ubuntu lo hacemos con un solo comando :)
"sudo apt-get install avrdude binutils-avr gcc-avr avr-libc gdb-avr".

Ya tenemos todo lo necesario para poder empezar a trabajar. Vamos a probar a compilar la librería estátoca del Core de Arudino.

Creamos un nuevo proyecto C++ en Eclipse y seleccionamos la opción de "AVR Cross Target Static Library". Importamos al proyecto todos los ficheros menos el main.cpp que encontramos en "arduino/hardware/core".
En propiedades del proyecto debemos configurar lo siguiente,

AVR > Target Hardware MCU ATmega328P y MCU CLock Frequency 16000000
C/C++ Build > Setting > (panel de la derecha) > AVR Compiler > Debugging > No debugging info
C/C++ Build > Setting > (panel de la derecha) > AVR Compiler > Optimization > Size Optimizations
C/C++ Build
> Setting > (panel de la derecha) > AVR C++ Compiler > Debugging > No debugging info
C/C++ Build > Setting > (panel de la derecha) > AVR C++ Compiler > Optimization > Size Optimizations

Ya está todo hecho, si le damos al martillo, debería compilarlo todo sin más problemas. En la carpeta Debug del proyecto encontraremos el fichero lib*.a (*=al nombre que le pusierais) que es la librería estática que adjuntaremos a todos nuestros proyecto de Arduino.

En la próxima entrega daré las claves para configurar un proyecto de aplicación y subirselo a Arduino usando avrdude.
Un saludo y espero que mi experiencia les sea de ayuda.

Leer más...
Actualizado ( Miércoles, 30 de Junio de 2010 19:01 )