martes, 22 de julio de 2014

msp430 toolchain en Ubuntu 14.04 - parte IV: proyecto Blinker

Finalmente!!!, ya estamos listos para usar nuestro flamantes eclipse, mspgcc, y mspdebug.

Actualización (con presentación queda más bonito):



Dejo para referencia la entrada original:


Dentro de eclipse tenemos que instalar el paquete que permite usar gdb con hardware:
Help-> Install New Software...


Verificar tener los siguientes repositorios instalados:
http://download.eclipse.org/tools/cdt/releases/8.4
http://download.eclipse.org/releases/luna
http://download.eclipse.org/eclipse/updates/4.4



Damos Ok, volvemos a la pantalla anterior, y en el campo Work with elegimos
CDT luna o All Available Sites
En el cuadro de busqueda escribir: gdb hardware
Y chequear el C/C++ GDB Hardware Debugging  debajo de CDT Optional Features.


Continuar con la instalación, (next, aceptar licencia, etc).

Configuración del compilador

File-> New -> C Project
Project name: Blinker
Project type: Empty Project
Toolchains: cross gcc


Next, Next,


Finish

File -> New -> Source File
Source file: main.c
Finish 


Copiar y pegar en la página de código:

#include <msp430.h>

int main(void)
{
    WDTCTL = WDTPW + WDTHOLD;
    P1DIR |= BIT0;
    while(1)
    {
        P1OUT ^= BIT0;
        __delay_cycles(1000000);
        __nop();

    }

    return 0;
}


En la ventana Project Explorer click derecho sobre Blinker -> Properties
Ir a C/C++ Build -> Settings
En el otro marco: pestaña Tool Settings -> Cross Settings
Path: /usr/local/msp430


Dentro de Cross GCC compiler agregar definición de símbolo __MSP430G2452__ (micro que tengo puesto en el Launchpad en este momento, si esa puesto el msp430g2553 -> __MSP430G2553__ ). Este paso no es estrictamente necesario (alcanza con los flags de compilación que se definen a continuación), pero viene bien para que el índice reconozca los nombres de registro, bits, etc (P1OUT, BIT0, WDTCTL...):



 En Miscellaneous agregar el flag: -mmcu=msp430g2452


Idem anterior en Cross GCC Linker-> Miscellaneous.
Los flags -Wl, -Map=memory.map hacen que el linker genere un mapa de memoria. Para este proyecto no tiene sentido, pero es útil para proyectos reales donde queremos saber segmentos de memoria, librerías incluídas, direcciones de funciones y variables, etc.


Idem en Cross GCC Assembler -> General


Opcionalmente, en la pestaña Build Steps podemos usar Post-build Steps para ejecutar algún programa o script. En este caso hacemos que al terminar de compilar nos muestre el uso de memoria del proyecto:
Command -> msp430-size ${ProjName}
Description: Uso de memoria


Listo, damos al botón de Ok y menu Project -> Build Project.
En la consola nos debería salir que salió todo bien:


Configuración mspdebug

En la ventana Project Explorer->click derecho sobre Blinker -> Debug As -> Debug Configurations
Seleccionar GDB Hardware Debugging y click sobre el ícono nuevo arriba a la izquierda:


Dejamos la pestaña Main sin modificar.
Pestaña Debugger: poner en GDB Command: msp430-gdb y en cuadro Port Number: 2000 (es el que utiliza por default el mspdebug)


Pestaña de Startup:
Esto ya es una cuestión de gustos. Personalmente no quiero que al iniciar una sesión de depuración se grabe un programa nuevo, por eso desmarco la casilla Load Image. Muchas veces corto la depuración o se cuelga y necesito empezar desde el principio con el mismo programa que estaba grabado antes (es decir, sin cambios de código entre sesiones de depuración).
Cuando tengo que cargar un programa o imagen nueva lo hago desde el mspdebug. No presionar el botón Debug todavía nos falta ejecutar mspdebug.


Enchufar el launchpad, abrimos un terminal (Ctrl-Alt-T) y ejecutamos:
mspdebug rf2500


Ya dentro de mspdebug:
prog Blinker
gdb

Listo, ahora mspdebug deja un servidor gdb abierto en el puerto 2000. Volvemos a eclipse y ahora sí hacemos click sobre el botón Debug, nos aparece esta ventana:


Opcional: eclipse se queja de que no encuentra el código fuente crt0.s
Si hay interes en depurar el código de inicialización (que es el encargado de inicializar constantes en RAM, la pila, librerías estandar, y demás código que utiliza C para funcionar), el archivo crt0.s se encuentra en la carpeta de instalación:
~/Install/mspgcc/gcc-4.7.0/libgcc/config/msp430/crt0.S
Si no interesa ver ese código, podemos hacer caso omiso.
Así queda la configuración si incluimos crt0.S:

 
Ir a la pestaña de código main.c, pararse con el cursor en la línea siguiente a
WDTCTL = WDTPW + WDTHOLD;
en este caso la línea:
P1DIR |= BIT0;
Y presionar CTRL + R. Con esto ejecutamos código hasta el cursor.
¿Por qué la línea siguiente?, porque con esa instrucción detenemos el watchdog, caso contrario si no la ejecutamos rápido el watchdog va a resetear el micro y vuelta al principio. Ignorar la flecha roja:


En este punto ya podemos depurar paso a paso, insertar breakpoints, ver valores de variables, etc.
Una vez terminada la sesión de depuración, presionamos sobre el cuadrado rojo arriba a la izquierda, y volvemos a la vista de programación clickeando en el botón C/C++ arriba a la derecha:

 
 
En la ventana de terminal ya nos aparece el prompt (mspdebug) listo para aceptar comandos:



Normalmente solo uso los comandos:
prog para cargar una nueva imagen,
gdb para aceptar la conexión de eclipse,
reset cuando reinicio una sesión de depuración con eclipse,
y claro, exit para salir del mspdebug.

No desenchufar el Launchpad hasta haber salido del mspdebug.

Al depurar con eclipse puede pasar que el programa se cuelgue, y no tengamos respuesta al ejecutar paso a paso, ni podamos ejecutar comandos en el terminal con mspdebug. En tal caso terminar la sesión de depuración en eclipse, y en el terminal mspdebug presionar Ctrl-C para interrupir la ejecución de código.
Conviene reiniciar mspdebug con el comando reset y luego empezar a depurar desde el principio.

Listo, ojalá sirva para ahorrarles dolores de cabeza (con que le pase a una persona ya alcanza) y puedan tener un comienzo más feliz con los msp430 utilizando herramientas libres.

Proxima entrada:
Las instrucciones paso a paso libres de palabrerío, para no tener que leer los 4 artículos para tener todo funcionando.

No hay comentarios:

Publicar un comentario