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.

sábado, julio 12, 2014

Gerbers de Altium para SeeedStudio

Este es un tutorial para crear Gerbers y NC Drill files desde Altium para fabricar PCBs en SeeedStudio. Una vez lista tu PCB sigue estos pasos.

- Abre tu archivo PCB

- Da click en File, Fabrication Outputs, Gerber Files


- Configura todas las siguientes ventanas como se muestran.






- Cuando terminas y das OK, se abrirá un archivo extensión .Cam.

- Estando en ese archivo ve a File, Export, Gerber.


- Configura la ventana como se ve a continuación.


- Al dar click en OK, podrás elegir dónde guardar tus archivos Gerber.


- Ahora sólo falta generar los archivos NC Drill. Regresa a tu archivo PCBDOC.

- Da click en File, Fabrication Outputs, NC Drill Files.


- Configura la ventana como se ve a continuación.


- La siguiente también.


- Se generará otro archivo Cam. Ve a File, Export, Gerber. Configura la ventana como en la imagen.


- Presiona OK. El archivo de los drills será txt.

- Empaqueta los siguientes archivos en un zip, checa las extensiones.

led_matrix.gbl
led_matrix.gbo
led_matrix.gbs
led_matrix.gml
led_matrix.gtl
led_matrix.gto
led_matrix.gts
led_matrix.txt

- Altium no genera el .GML o .GKO que pide SeeedStudio directamente. Lo genera llamándose .GM13 que es la capa Mechanical 13 donde debes dibujar la forma que tendrá tu PCB. Toma el GM13 y renombra su extensión a GML.

Gracias por leer este brevísimo tutorial. Si te fue de utilidad no dudes en visitar a nuestros patrocinadores.

sábado, marzo 01, 2014

Leyendo el File System de la Raspberry Pi con Samba

Para acceder a los archivos de la Raspberry Pi normalmente se puede lograr son SSH o a través de SFTP. Yo usaba SSH Secure File Transfer, pero había que estar conectándose a la Pi a través del programa y pues me daba flojera.


En Ubuntu instalé Samba para poder montar el file system de mi compu virtual en Linux a través de Windows. Samba te permite conectarte a los archivos de otros equipos, sin importar qué sistema operativo están corriendo. Una vez conectado con Samba, el file system se puede montar en Windows en una unidad de red.


Instrucciones de instalación de Samba

+ Conéctate a tu Pi a través de SSH

+ Actualiza los paquetes de instalación que hay disponibles para tu Pi
sudo apt-get update

+ Instala Samba
sudo apt-get install samba

+ Instala herramientas para comprobar la configuración de Samba y dar de alta usuarios
sudo apt-get install samba-common-bin

+ Ve al directorio donde Samba busca el archivo de configuración
cd /etc/samba

+ Crea un backup del archivo actual (por si te sirve el otro)
sudo mv smb.conf backsmb.conf

+ Edítalo con nano
sudo nano smb.conf

+ Ingresa lo siguiente para compartir el file system completo
#
[global]
workgroup = Workgroup
server string = My Samba Share %v
security = user
map to guest = bad user
dns proxy = no
#
[RootAtPi]
comment = Raspberry Pi Root Folder
path = /
browsable = yes
guest ok = no
read only = no
create mask = 0755

+ Guárdalo

+ Comprueba que lo ingresado esté bien
pi@pisanlink:/$ testparm
Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Processing section "[RootAtPi]"
Loaded services file OK.
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions

[global]
        server string = My Samba Share %v
        map to guest = Bad User
        dns proxy = No
        idmap config * : backend = tdb

[RootAtPi]
        comment = Raspberry Pi Root Folder
        path = /
        read only = No
        create mask = 0755
pi@pisanlink:/$ 

+ Ahora agrega un usuario a los enlistados de Samba
sudo smbpasswd -a pi

Nota: Puedes agregar a 'root' si deseas editar archivos del mismo

sudo smbpasswd -a root

+ Te pedirá que dés de alta el password

+ Una vez listo todo lo anterior, deberás reiniciar el servicio de Samba
sudo /etc/init.d/samba restart

Instrucciones de montaje en Windows

Yo uso Windows 7 y para montar una unidad de red sólo basta con ir a Equipo y en el menú seleccionar Conectar a unidad de red.


En la ventana, ingresa la IP de tu Pi.


Selecciona una unidad, y después da click en Examinar.

Ingresa tu usuario y contraseña dados en smbpasswd.

Y listo, podrás tener todo el file system a tu disposición en Windows. Los archivos que son modificables por root sólo podrás leerlos desde Windows.


viernes, enero 03, 2014

Visual C# 2008 - Error al depurar variables locales (Win7, Net 2.0, 64 bits)

Estuve batallando con un código en C# 2008 Express Edition (apuntando al .NET Framework 2.0) en el que tenía unas variables locales que no podía depurar (leer su contenido) en el IDE de Visual Studio. El problema que aparecía en la ventana es el siguiente:

No se puede evaluar la expresión porque un subproceso está detenido en un punto en el que la recolección de elementos no utilizados no es posible, quizás debido a que el código está optimizado.

Da click en la imagen para verla completa.


Buscando en línea, no encontré mucho, porque el texto está en español y pues en español hay poca suerte con este tipo de problemas. Lo traduje pero nunca encontré la traducción exacta y mejor le busqué yo.

Resulta que cuando uno está trabajando con C# 2008, el .NET Framework 2.0, una máquina de 64 bits y Windows de 64 bits (Win 7 Home Premium en mi caso), el depurador se pone tonto y se le van las cabras.

Para corregirlo:

+ Click en Herramientas, click en Opciones...



+ Click en Mostrar todas las configuraciones
+ Luego click en la categoría de Proyectos y soluciones y habilita Mostrar configuraciones de compilación avanzadas



+ Da click en Aceptar
+ Ahora en el IDE aparecerán opciones de compilación nuevas:


+ Selecciona Release y en Any CPU selecciona Administrador de configuración...
+ En la pestaña de Plataforma selecciona Any CPU y dale
+ Busca la opción de x86, para que tu código funcione en modo 32 bits.

Y listo, corre tu programa y si tenías el mismo problema que yo, entonces ya habrá quedado resuelto y podrás depurar tus variables como siempre.