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

4

printf() para consolar a través de Spy-Bi-Wire debe ser compatible con TI Code Composer Studio. Encontré esta página , que explica cómo habilitar printf() . Pero parece que no puedo hacer que funcione. La ejecución del programa simplemente se bloquea, cuando llega a printf() .

Mi configuración consiste en:

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

  • E / S de consola (CIO) habilitada
  • Tamaño de pila 768, tamaño de pila 1024. (También probé 300 y 400, respectivamente.)
  • printf() soporte 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 se bloquea , cuando llega a printf() .

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

000004  3FFF  JMP  (0x0004)

¿Es este un salto sin fin?

En un momento, pensé que hay un problema con mi instalación de CCStudio. Inicialmente, instalé 5.3 encima de 4. Instalé CCStudio 5.3 en otra computadora (virgen). Estoy viendo exactamente el mismo problema.

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

¿Qué me estoy perdiendo? ¿Qué puede salir mal?
¿Alguien más ha tenido problemas como este?
¿Es esto algo que funciona con JTAG de 4 cables, pero no funciona con Spy-Bi-Wire?

    
pregunta Nick Alexeev

1 respuesta

3

Parece un problema de asignación de memoria, aunque no he usado mucho la serie MSP430, veo que la MSP430FR5739 solo tiene 1K de SRAM, por lo que algunas configuraciones que probaste no tienen mucho sentido. Para empezar, debe intentar leer el mapa de memoria y ver cuánto espacio ocupan las variables estáticas para poder calcular cuánto queda de 1 K para la pila y el montón. También lea la documentación de printf para ver cuánto de cada uno requiere. .

0x3FFF corresponde a un jmp -1 relativo, en otras palabras, un bucle infinito. No estoy seguro de CCStudio en particular, pero muchos compiladores llenan la memoria no utilizada con esa instrucción. Eso significa que si el código salta a una ubicación que no contiene ninguna ejecución de código se detiene en lugar de continuar causando problemas adicionales.

Personalmente nunca uso printf en microcontroladores pequeños, es mucho mejor comenzar con rutinas de salida de caracteres simples como putchar y putting. Entonces, si necesita un resultado numérico, por ejemplo, ruede sus propias rutinas mínimas para hacer lo que necesita. La biblioteca de printf puede ser bastante grande incluso en variantes compactas debido a la gran cantidad de formatos que admite, aunque probablemente no los esté utilizando.

    
respondido por el PeterJ

Lea otras preguntas en las etiquetas