martes, septiembre 23, 2014

Eclipse como alternativa a MPLAB X (NetBeans)

Hola, seguramente como usuario de los PICs de Microchip te has visto obligado a moverte del, por todos conocido MPLAB 8 al más completo MPLAB X. También seguramente has notado que MPLAB X, como corre en Java, es lento y un poco torpe, incluso en equipos con buenos procesadores y RAM.

En este tutorial encontrarás a Eclipse como una alternativa para editar tus proyectos de MPLAB X, sin dejar de usar MPLAB X para compilar y depurar tu proyecto.

Actualización: al final de este tutorial podrás encontrar los pasos para compilar un proyecto de MPLAB X en la consola de Windows o también desde Eclipse.

Asumo que ya tienes instalado MPLAB X y cualquier compilador XC de Microchip. Descarga Eclipse para C/C++ desde el siguiente link...

https://eclipse.org/downloads/packages/eclipse-ide-cc-developers/keplerr

Descomprime el ZIP en un fólder apropiado (no rutas largas) y ya tendrás Eclipse listo para usar. Si te sale una ventana indicando que no encuentra Java, asegúrate de haber descargado Eclipse de 32 o 64 bits, dependiendo de la arquitectura de tu computadora.

Ejecuta Eclipse. La primera vez que lo ejecutas te pregunta si deseas establecer una carpeta de trabajo (workspace). Te sugiero establecerla en un lugar apropiado... no Mis Documentos ni esos fólders de Windows que ante un virus... siempre se borran. ;-) En mi ejemplo la pondré en el escritorio, ¡pero no sigas mi ejemplo!



El workspace es simplemente un lugar en donde Eclipse guardará configuraciones globales. No necesariamente será donde guardes tus proyectos. Puede serlo si prefieres... aunque yo prefiero tener mis proyectos en otro lado.

La primera vez te saldrá esta ventana. Da click en Workbench para salir de ahí.


La ventana principal de Eclipse se mostrará.


A continuación, una equivalencia entre las ventanas de MPLAB X y Eclipse. Son obvias, pero no está de más mostrarlas. Yo hace tiempo no usaba el Outline de Eclipse para nada, me la pasaba dándole vueltas a la ruedita del mouse yendo entre función y función de un archivo... sin saber que el Outline te mueve entre funciones y variables muy rápidamente.

A - Explorador del proyecto
B - Editor del archivo
C - Navegador de funciones, variables y demás (Navigator vs. Outline)



Para importar un proyecto ya existente de MPLAB X a Eclipse sigue estos pasos:

- Click en File, New, Makefile Project with Existing Code
- Da click en Browse y ve a la ruta donde tu proyecto está
- Recuerda ir a la carpeta que contiene dentro el fólder MPLAB.X, no a la carpeta MPLAB.X como tal
- Quita la palomita de C++ (a menos que andes trabajando con PIC32... lo cual es genial)


Una vez estrenado tu proyecto en Eclipse lo podrás ver en el Project Explorer. Un tip... habilita las flechitas Link with Editor. Así, cuando tengas abiertos varios archivos en el editor, el Project Explorer siempre va a mostrar qué archivo estás modificando.


Otro tip opcional... a mí no me gusta que Eclipse use el folding, que esconde bloques de código o funciones.


Deshabilítalo entrando a Window, Preferences, escribe fold en el cuadro superior izquiero y deshabilita la opción Enable folding when opening a new editor.

Ahora, verás que Eclipse apenas ve tu código y se pone a regañarte que porque no encuentra declaraciones y definiciones de varias cosas en él.


Primero, hay que hacerle saber a Eclipse donde están los includes de nuestro compilador. En mi caso yo usé XC8, deberás agregar la ruta de los includes a las propiedades de tu proyecto.

- Da click derecho a tu proyecto y dale en Properties
- Ve a C/C++ General, Paths and Symbols
- Ve a la pestaña Includes y da click en Add...
- En la nueva ventana da click en File System...
- En mi caso el path de includes es el siguiente, busca el tuyo apropiadamente:
C:\Program Files (x86)\Microchip\xc8\v1.32\include
- Habilita las opciones Add to all configurations y Add to all languages


- Agrega también el path de los headers de los periféricos (plib)

Tu ventana deberá quedar más o menos así.


Si los bichitos de error aún no desaparecen de tu editor, da click derecho a tu proyecto y elige Index, Rebuild. Esto hará que la mayoría de ellos desaparezcan. Además sirve para que tu proyecto reconozca palabras del código fuente al darles F3 o Control + Click.

Si das Control + Click en cualquier palabra de tu código, digamos uint8_t, el editor abrirá el lugar en donde está definida o declarada. También puedes verlo dejando el mouse un ratito sobre ella.

Aún así, hay cosas que no son estándar del compilador XC8 y Eclipse seguirá sin entenderlas. Si se presentan esos casos, y sabes que ya incluiste el header apropiado, entonces sigue estos pasos...

- Ve a Windows, Preferences
- Escribe Code Analysis en el buscador
- Da click en Use Project Settings
- Deshabilita Field cannot be resolved
- Deshabilita Symbol cannot be resolved

Eso tranquilizará a Eclipse.

Eclipse es bueno desdoblando Macros y Macros X, sólo basta con poner tu mouse sobre el define de la macro que quieres ver explorada y listo. Puedes lograr lo mismo, pero viendo paso a paso cómo se desdobla la macro seleccionando el define que te interesa y dando click derecho, elige Explore Macro Expansion.


Personalmente nunca me ha gustado que un editor termine mis frases jeje, es decir, que cierre paréntesis, llaves y demás detalles. Si quieres deshabilitarlos...

- Ve a Windows, Preferences
- Escribe braces en la búsqueda
- Deshabilita lo que te interese


Si te interesa ver el número de línea en tu editor, ve a Window, Preferences y escribe en la búsqueda numbers. Habilita la opción Show line numbers.

A veces uno quiere abrir un archivo, pero uno no se acuerda dónde está. Para abrirlo rápidamente presiona Control + Shift + r. Esto abrirá un diálogo en el que podrás escribir el nombre del archivo. Eclipse te sugerirá una lista de archivos que coinciden con lo que vas escribiendo.


Puedes usar los comodines * y ? para escribir sólo partes del archivo, por si te falla la memoria o te da flojera escribir todo el nombre.

Otro combo interesante es... Control + Shift + t. Este sirve para buscar clases, typedefs, enumeraciones, macros, estructuras, etc. La ventanita te ayuda a buscar dónde es que se definieron, por si otra vez la memoria te falló jejej


Y una última función que también uso mucho de Eclipse es el Open call hierarchy. Te dice quiénes hacen uso de una función o de una variable. Basta con dar click derecho sobre la indiciada y elige Open call hierarchy.

Por el momento es lo que se me ocurre de tips de Eclipse. Si quieres preguntar algo o tienes un tip por compartir, envíalo por favor a través de los comentarios. Gracias.

Actualización - Compila tu proyecto desde la consola de Windows (cmd) o desde Eclipse

MPLAB X incluye una versión GNU del comando make, entre otros comandos. Esos binarios se encuentran normalmente en:

C:\Program Files (x86)\Microchip\MPLABX\gnuBins\GnuWin32\bin

O sin (x86) si tu Windows es de 32 bits.

Si corres el comando make desde esa ubicación... falla todo...

C:\santiago\hw_for_testing\Model_B_Dig_Outputs\firmware\model_b\MPLAB.X>"C:\Program Files (x86)\Microchip\MPLABX\gnuBins\GnuWin32\bin\make" clean
C:/Program Files (x86)/Microchip/MPLABX/gnuBins/GnuWin32/bin/make -n -f nbproject/Makefile-LPCUSBDK_16F1459.mk SUBPROJECTS= .clean-conf
/usr/bin/sh: -c: line 0: syntax error near unexpected token `('
/usr/bin/sh: -c: line 0: `C:/Program Files (x86)/Microchip/MPLABX/gnuBins/GnuWin
32/bin/make -n -f nbproject/Makefile-LPCUSBDK_16F1459.mk SUBPROJECTS= .clean-conf'
nbproject/Makefile-impl.mk:44: recipe for target '.clean-impl' failed
make: *** [.clean-impl] Error 1

El motivo es porque la ruta original tiene espacios en blanco.

Para solucionar esto, toma la siguiente carpeta completa...

C:\Program Files (x86)\Microchip\MPLABX\gnuBins\GnuWin32\bin

Y cópiala en una ruta breve y sin espacios... sugiero:

C:\gnubin\

Compilando desde consola

Abre una consola de Windows. Viaja al fólder MPLAB.X de tu proyecto con cd. O, si quieres hacerlo más rápidamente, en un explorador de Windows ve a ese fólder, presiona Shift, da click derecho en él y selecciona Abrir una ventana de comandos aquí.




Una vez en la ruta de MPLAB.X, abre unas comillas y coloca la ruta donde guardaste tus binarios GNU y agrégale make... en mi caso la ruta que usé es otra, pero entiendes la idea... y agrega clean, para limpiar tu proyecto.


C:\santiago\hw_for_testing\Model_B_Dig_Outputs\firmware\model_b\MPLAB.X>"C:\santiago\hw_for_testing\gnu_bin\make" clean
C:/santiago/hw_for_testing/gnu_bin/make -n -f nbproject/Makefile-LPCUSBDK_16F1459.mk SUBPROJECTS= .clean-conf
make[1]: Entering directory 'C:/santiago/hw_for_testing/Model_B_Dig_Outputs/firmware/model_b/MPLAB.X'
rm -f  -r build/LPCUSBDK_16F1459
rm -f  -r dist/LPCUSBDK_16F1459
make[1]: Leaving directory 'C:/santiago/hw_for_testing/Model_B_Dig_Outputs/firmware/model_b/MPLAB.X'

La limpieza se habrá hecho correctamente.

Tienes varios targets de compilación de acuerdo al contenido de Makefile. Pruébalos.


#     build                    build a specific configuration
#     clean                    remove built files from a configuration
#     clobber                  remove all built files
#     all                      build all configurations

#     help                     print help mesage

Compilando desde Eclipse

Abre las propiedades de tu proyecto. Entra a C/C++ Build. Desactiva Use default build command. En Build command ingresa el path del fólder gnubin que copiaste. Agrégale make y un espacio blanco al final.




Ahora, ve al iconito de Target (es una diana verde) y dale click. Se abrirá una ventana llamada Make Target. Expande tu proyecto y selecciona el fólder MPLAB.X. Luego selecciona la dianita con el más.



En la configuración, ingresa clean. Repite los pasos y haz otro target, pero que se llame all.



Y listo. Tendrás la opción de limpiar y compilar tu código desde Eclipse dando doble click en las dianitas.



Ahora... sólo falta depurar con Eclipse jajaj.

Existe la opción de agregar tu ruta de los binarios GNU al PATH de Windows. El detalle es que si tienes otro make por ahí, usará el otro en vez del tuyo o viceversa, dependiendo de qué ruta está primero en PATH. Yo tuve conflicto con cygwin, así que preferí no usar el método de PATH.

Saludos. Gracias por leerme.