Gast schrieb:
> Habe ich richtig versanden?
> Die Funktion printf funktioniert?
> Soll ich irgendwelche Einsatellungen vornehmen.
> Bei mir wen ich printf ("random number = %d\n", 10); und in sebug-Modus
> gehen.
> Scheint was nicht zu funktionieren. Also run ist ausgegraut.
Hi,
ganz so einfach ist es leider nicht.
Also...
man nehme die CMSIS für Cortex-M3 (oder nur diesen Demo-Code hier):
static uint32_t ITM_SendChar (uint32_t ch)
{
if(ch == '\n') ITM_SendChar('\r');
if ((CoreDebug->DEMCR & CoreDebug_DEMCR_TRCENA) &&
(ITM->TCR & ITM_TCR_ITMENA) &&
(ITM->TER & (1UL << 0)) )
{
while (ITM->PORT[0].u32 == 0);
ITM->PORT[0].u8 = (uint8_t) ch;
}
return (ch);
}
und ergänze das ganze um das retargeting:
#include <stdio.h>
int fputc(int c, FILE *f)
{
ITM_SendChar(c);
return(c);
}
und schon funzt dein printf.
Willst du das ganze auf dem UART haben, biege die Funktionen in der
fputc um nach uart1_putchar(c); z.B. und implementiere diese Funktion,
so dass sie Zeichen auf den UART schickt.
Zum ITM in uVision 3, 4, am Beispiel eines STM32
Baue das o.g. in deine Software ein.
Dann compilieren
Target driver (debug) einstellen:
- project -> options for target
- Tab "Debug"
- ev. Target abhängiges .ini file laden, z.B. STM32DBG.ini (findet sich
unter C:\Keil\ARM\Boards\Keil\MCBSTM32\STLIB_Blinky)
- settings
Debug:
- SWJ / Port SW für ULINK
- Port SW für jLink
Trace:
- [x] Trace enable
- Core Clock einstellen (z.B. 72MHz)
- ITM stimulus Port 0 sowie Port 7..0 anticken
- PC sampling nicht zu hoch ansetzen, sonst bleibt nicht mehr genügend
SWO bandbreite für ITM übrig.
Debug session starten...
View -> Serial Windows -> ITM (printf) viewer
und schon habt ihr ein schönes Window, dass die printf Daten anzeigt,
die aus dem Core kommen.
Ab UV4:
Dieses serial Window verfügt - genau wie die anderen serial windows -
über einen grundlegenden vt100 support und div. anzeigemodes sowie
Möglichkeiten zum Speichern der Ausgabe.
Das Kontextmenue mit rechter Maustaste gibt hier auskunft...
ANSI VT100 Terminal functions:
------------------------------
- CR Carriage Return
- LF Line Feed
- BS Back Space
- TAB Tabulator
- BEL Bell
- ESC [ C move cursor (position) 1 to the right
- ESC [ D move cursor (position) 1 to the left
- ESC [ J Clear Screen
- ESC [ K delete line right to cursor
- ESC [ yy;xxf sets Cursor to Row yy, Colum xx
Cursor Keys transfered to the Terminal from the GUI
-----------------------------------------------------
- ESC [ A Cursor Keys UP
- ESC [ B Cursor Keys DOWN
- ESC [ C Cursor Keys RIGHT
- ESC [ D Cursor Keys LEFT
Examples
---------
void ClearScreen(void)
{
printf(fp, "%c[1;1f%c[J", 27, 27); // terminal-control-sequence for
clear-screen / Cursor Home
}
void gotoxy(int x, int y)
{
printf("%c[%i;%if", 27, (signed int)y, (signed int)x);
}
ausserdem sind da noch einige nette Features zum Handling mit drin,
sowie ein interessanter Mixed Mode zur Protokollanalyse.
Funktioniert übrigends auch im Simulator!
VG,
/th.