Wir haben ein Gerät und ich würde gerne printf Funktion verwenden, um Nachrichten an die IDE zu Debugging-Zwecken zu senden. Das Setup:Zeige printf Nachrichten in IDE während des Debuggens
ARM Cortex-M3-Gerät
ULINK2 Schnittstelle
uVision4 IDE
ich die Anweisungen in this link verfügbar gefolgt sind in der Lage sein zu sehen, die Nachrichten im "Debug (printf) Viewer". Zuerst I modifiziert, um die "retarget.c" -Datei, die Ausgabe an die Schnittstelle ITM zu umleiten:
#include <stdio.h>
#include <rt_misc.h>
#pragma import(__use_no_semihosting_swi)
// Para utilização do saida de debug através do ULINK2
#define ITM_Port8(n) (*((volatile unsigned char *)(0xE0000000+4*n)))
#define ITM_Port16(n) (*((volatile unsigned short*)(0xE0000000+4*n)))
#define ITM_Port32(n) (*((volatile unsigned long *)(0xE0000000+4*n)))
#define DEMCR (*((volatile unsigned long *)(0xE000EDFC)))
#define TRCENA 0x01000000
struct __FILE { int handle; /* Add whatever you need here */ };
FILE __stdout;
// Escreve caractere na porta de Debug
int sendchar (int ch) {
if (DEMCR & TRCENA) {
while (ITM_Port32(0) == 0);
ITM_Port8(0) = ch;
}
return(ch);
}
int fputc(int ch, FILE *f) {
return (sendchar(ch));
}
int ferror(FILE *f) {
/* Your implementation of ferror */
return EOF;
}
void _ttywrch(int ch) {
sendchar(ch);
}
void _sys_exit(int return_code) {
label: goto label; /* endless loop */
}
Dann konfiguriert I IMT im uVision4, nach den Anweisungen:
Das Projekt Kompilierungen fein. Ich lade die Anwendung auf das Gerät und starte eine Debug-Sitzung mit uVision4. Ich versuche, Printf mit einer einfachen Nachricht in der Hauptfunktion direkt nach der Systeminitialisierung zu verwenden, aber der Debug Viewer bleibt leer. Ich habe Haltepunkte in die "sendchar" -Funktion gesetzt, ich kann sehen, dass alle Zeilen wie erwartet getroffen werden.
Hat es jemand geschafft, printf mit ULINK2 und uVision4 zu verwenden? Hat jemand eine Ahnung, warum ich keine Ausgabe im Debug Viewer-Fenster sehen kann?
UPDATE
Ich habe versucht, die bestehenden ITM Funktionen zu nutzen, in einer einfacheren "retarget.c" resultierende:
int fputc(int ch, FILE *f) {
return (ITM_SendChar((uint32_t)ch));
}
Dennoch wird keine Ausgabe im Debug-Viewer angezeigt. Wenn ich den printf-Funktionsaufruf überspringe, wird "Trace: Data Overflow" unten in der IDE angezeigt, gefolgt von "Trace: Communication Error".
Und bevor man überprüft CoreClock, stellen Sie sicher, dass 'HSE_VALUE' der tatsächlichen Oszillatorfrequenz eingestellt wird, wenn eine solche verwendet wird. Ich fand auch wichtig, das 'TRACE_IOEN' Bit in' DBGMCU_CR * ((flüchtige unsigned *) 0xE0042004) = 0x00000020; ' –