4 votos

MSP430 printf() a través de Spy-Bi-Wire se cuelga

printf() a la consola a través de Spy-Bi-Wire debería ser compatible con TI Code Composer Studio. Encontrado esta página que explica cómo habilitar printf() . Pero no consigo que funcione. La ejecución del programa simplemente se cuelga, cuando llega a printf() .

Mi configuración consiste en:

Para intentar habilitar el printf(), he cambiado esta configuración en Proyecto->Propiedades:

  • Consola de E/S (CIO) habilitada
  • Tamaño de la pila 768, tamaño del montón 1024. (También he probado con 300 y 400, respectivamente).
  • printf() apoyo establecido en minimal

    /*

    • ======== Standard MSP430 includes ======== */

      include <msp430.h>

      include <stdio.h>

    /*

    • ======== Grace related includes ======== */

      include <ti/mcu/msp430/Grace.h>

    /*

    • ======== main ======== */ int main(void) { Grace_init(); // Activate Grace-generated configuration

      while (1) { P1OUT |= BIT0; __delay_cycles(100000); P1OUT &= ~ (BIT0); __delay_cycles(100000);

      printf("*\n");    // hangs here

      }

      return (0); }

El problema es que la ejecución del programa cuelga Cuando llegue a printf() .

En la vista de desensamblaje, el código se cuelga en esta línea

000004  3FFF  JMP  (0x0004)

¿Es un salto interminable?

En un momento dado, pensé que había un problema con mi instalación de CCStudio. Inicialmente, he instalado 5.3 sobre 4. He instalado CCStudio 5.3 en otro ordenador (virgen). Veo exactamente el mismo problema.

Ahora que lo pienso, estoy usando el mismo FET430. Puede ser, el problema está en mi FET430 o su firmware.

¿Qué me falta? ¿Qué podría ir mal?
¿Alguien más ha tenido problemas de este tipo?
¿Es algo que funciona con JTAG de 4 hilos, pero no funciona con Spy-Bi-Wire?

3voto

xilun Puntos 261

Suena como un problema de asignación de memoria, aunque no he usado mucho la serie MSP430 veo que el MSP430FR5739 sólo tiene 1K de SRAM por lo que algunos ajustes que has probado no tienen mucho sentido. Para empezar deberías intentar leer el mapa de memoria y ver cuánto espacio ocupan las variables estáticas para poder calcular cuánto queda de los 1K para la pila y el heap, también lee la documentación de printf para ver cuánto requiere de cada una.

0x3FFF corresponde a un jmp -1 relativo, es decir, un bucle infinito. No estoy seguro con CCStudio en particular pero muchos compiladores llenan la memoria no utilizada con tal instrucción. Eso significa que si el código salta a una ubicación que no contiene ningún código, la ejecución se detiene en lugar de continuar causando potencialmente más problemas.

Personalmente nunca uso printf en microcontroladores pequeños, es mucho mejor empezar con rutinas de salida de caracteres simples como putchar y puts. Luego, si necesitas una salida numérica, por ejemplo, puedes crear tus propias rutinas mínimas para hacer lo que necesitas. La librería de printf puede ser bastante grande incluso en variantes compactas debido al amplio número de formatos que soporta aunque probablemente no los estés usando.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X