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:
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?
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.
Apalopohapa
vermaete
printf("*\n\r"); -- or \r\n