MSP430 printf() durch Spy-Bi-Wire hängt

printf()zur Konsole über Spy-Bi-Wire sollte im TI Code Composer Studio unterstützt werden. Habe diese Seite gefunden , die erklärt, wie man aktiviert printf(). Aber ich schaffe es nicht, es zum Laufen zu bringen. Die Programmausführung hängt sich einfach auf, wenn es zu printf().

Mein Setup besteht aus:

Um zu versuchen, printf() zu aktivieren, habe ich diese Einstellungen in Project->Properties geändert:

  • Konsolen-E/A (CIO) aktiviert
  • Stack-Größe 768, Heap-Größe 1024. (Auch 300 bzw. 400 versucht.)
  • printf()Unterstützung eingestelltminimal
/*
 * ======== 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);
}

Das Problem ist , dass die Programmausführung hängt , wenn es dazu kommt printf().

In der Disassembly-Ansicht hängt der Code an dieser Zeile

000004  3FFF  JMP  (0x0004)

Ist das ein endloser Sprung?

Irgendwann dachte ich, dass es ein Problem mit meiner CCStudio-Installation gibt. Anfangs habe ich 5.3 auf 4 installiert. Ich habe CCStudio 5.3 auf einem anderen Computer (jungfräulich) installiert. Ich sehe genau das gleiche Problem.

Wenn ich darüber nachdenke, verwende ich denselben FET430. Möglicherweise liegt das Problem an meinem FET430 oder seiner Firmware.

Was vermisse ich? Was könnte schiefgehen?
Hatte noch jemand solche Probleme?
Funktioniert das mit 4-Draht-JTAG, aber nicht mit Spy-Bi-Wire?

Hier ist eine aktualisiertere Wiki-Seite zur Unterstützung von printf: processors.wiki.ti.com/index.php/… Ich weiß nicht, warum es bei Ihnen nicht funktioniert, aber haben Sie es versucht, ohne Grace zu verwenden?
Nur mal so:printf("*\n\r"); -- or \r\n

Antworten (1)

Es hört sich nach einem Speicherzuweisungsproblem an, obwohl ich die MSP430-Serie nicht oft verwendet habe, sehe ich, dass der MSP430FR5739 nur 1 KB SRAM hat, sodass einige Einstellungen, die Sie ausprobiert haben, nicht viel Sinn machen. Zunächst sollten Sie versuchen, die Memory Map zu lesen und zu sehen, wie viel Platz die statischen Variablen einnehmen, damit Sie berechnen können, wie viel von 1K für den Stack und Heap übrig bleibt. Lesen Sie auch die Dokumentation für printf, um zu sehen, wie viel von jedem benötigt wird .

0x3FFF entspricht einem relativen jmp -1 also einer Endlosschleife. Ich bin mir insbesondere bei CCStudio nicht sicher, aber viele Compiler füllen ungenutzten Speicher mit einer solchen Anweisung. Das heißt, wenn der Code an eine Stelle springt, die keinen Code enthält, stoppt die Ausführung, anstatt fortzufahren, was möglicherweise weitere Probleme verursacht.

Persönlich verwende ich printf nie auf kleinen Mikrocontrollern, Sie sind viel besser dran, mit einfachen Zeichenausgaberoutinen wie putchar und puts zu beginnen. Wenn Sie dann beispielsweise eine numerische Ausgabe benötigen, rollen Sie Ihre eigenen minimalen Routinen, um das zu tun, was Sie benötigen. Die printf-Bibliothek kann aufgrund der großen Anzahl von Formaten, die sie unterstützt, selbst in kompakten Varianten ziemlich groß sein, obwohl Sie sie wahrscheinlich nicht verwenden.