PRINTF Debuging mit Nucleo Board

ITM Instrumentation Trace Macro Cell
SWV Serial Wire Viewer

Die modernen Cortexm Prozessoren erlauben das Debuggen aber einen PIN (serial wire). Die Serielle Schnittstelle bleibt frei, Timings im Programmablauf werden nicht beeinflusst.

 

1. User Code

int __io_putchar(int ch) {
   ITM_SendChar(ch);
   return ch;
}

//int _write(int file, char *ptr, int len)
//{
//    //return usart_write(platform_get_console(), (u8 *)ptr, len);
//      int i=0;
//      for(i=0 ; i<len ; i++)
//        ITM_SendChar((*ptr++));
//      return len;
//}

2. #include <stdio.h>
printf("aha, so geht das\n);

ACHTUNG! Die Ausgabe erfolgt nur, wenn ein \n enthalten ist oder wenn mit fflush(stdout) der Inhalt des Ausgabepuffers geleert wird.

 

Alternativ kann man ein Macro vereinbaren:

/* Private macro -------------------------------------------------------------*/
 #define debug(fmt, ...) printf(fmt, ##__VA_ARGS__); fflush(stdout);


debug("text %d %f", 12, 1.2); //Verwendung wie printf

Wenn Float-Zahlen ausgegeben werden sollen, muss der Compiler umgestellt werden:

Image5

3. //Run/Debug Configuration

Bei Punkt 4)  muss die Systemtaktrate eingetragen werden (Default 84.0MHz)

Image1

 

 

 

4. Debugger starten

5. //Window/Show View/Other/SWV ITM Data Console

6. Data Console konfigurieren

Image2

7. Aufzeichnung starten

 

 

Image3

 

 

 

Data Trace Graph

 

Image4Adresse oder Variablenname verwenden und Datentyp beachten!