Forum: Mikrocontroller und Digitale Elektronik SW4STM32 System Workbench, ST-Link 2.1 und SWO Ausgaben


von Stefan F. (Gast)


Lesenswert?

Ich kann über den SWO Pin Debug Meldungen ausgeben. Die Anziege im 
ST-Link Utility klappt.

Allerdings muss ich das ST-Link Utility schließen, um debuggen zu 
können. Daher möchte ich die Ausgabe lieber irgendwo in der Eclipse IDE 
sehen.

Ich habe dazu im Prinzip zwei Anleitungen gefunden, die aber beide nicht 
funktionieren:

1) Die einen sagen, dass ich lediglich ein Kommando an openocd absetzen 
muss:
trace 8000000 traceoutput.bin
Aber dieses Kommando kennt meine openocd Version nicht.

2) Die andere Variante benutzt semihosting, mit dem openocd Kommando:
monitor arm semihosting enable
Auch dieses Kommando kennt meine openocd Version nicht.

Ich soll mein Programm mit den Optionen "-specs=rdimon.specs -lc 
-lrdimon" linken und die Funktion "initialise_monitor_handles()" 
aufrufen, aber die gibt es nicht (auch nicht mit z), sagt zumindest der 
Linker.

Zudem soll semihosting sehr langsam sein, ich habe daher aufgehört, hier 
weiter zu forschen. Eigentlich möchte ich Methode 1 umsetzen, jedoch 
nicht mit einem Logfile sondern mit Ausgabe in einer Ecplise View.

Kann es sein, dass ich eine kommerzielle Version von openocd benötige, 
um SWO Meldungen anzuzeigen?

von Jim M. (turboj)


Lesenswert?

Stefan U. schrieb:
> Daher möchte ich die Ausgabe lieber irgendwo in der Eclipse IDE
> sehen.

Kannst Du Deinen ST-Link in einen J-Link umflashen? Es gibt von Segger 
für einige Typen entsprechende Firmware.

Mit einem J-Link kann man Segger RTT einsetzen. Damit kann man entweder 
den Segger RTT Viewer oder das (Telnet) Terminal in Eclipse verbinden.

Ansonsten kennt OpenOCD aucgh sein eigenes Semihosting (DCC), siehe 
libdcc (http://repo.or.cz/openocd.git/tree/HEAD:/contrib/libdcc).

von A. B. (Gast)


Lesenswert?

SWO geht mit openocd-0.10.0 bei mir mittels

tpiu config internal tpiu.log uart off 48000000

in die Datei tpiu.log. Allerdings benutze ich dabei J-Link, nicht 
ST-Link. Eine "kommerzielle" Version von openocd gibt's nicht.

von Stefan F. (Gast)


Lesenswert?

Danke A.B., das hat geklappt.

Das Logfile enthält allerdings nach jedem Buchstaben ein Steuerzeichen.
Aber immerhin, so ist es besser, als nichts.

von pegel (Gast)


Lesenswert?

semihosting funktioniert bei mir super nach dieser Anleitung:

http://alphaloewe.com/2017/01/24/enable-semi-hosting-with-openstm32-system-workbench/

zum Testen in der main.c:
1
/* USER CODE BEGIN PFP */
2
/* Private function prototypes -----------------------------------------------*/
3
extern void initialise_monitor_handles(void);
4
/* USER CODE END PFP */
1
  /* USER CODE BEGIN 2 */
2
  initialise_monitor_handles();
3
4
  char scan_buf [10];
5
  printf("Semi Test:\n");
6
  scanf("%s",&scan_buf);
7
  printf("Eingabe war: %s\n",scan_buf);

von pegel (Gast)


Lesenswert?

Stefan U. schrieb:
> 2) Die andere Variante benutzt semihosting, mit dem openocd Kommando:
> monitor arm semihosting enable
> Auch dieses Kommando kennt meine openocd Version nicht.

Welche Version ist das denn?
Die bei AC6 dabei ist funktioniert.

von pegel (Gast)


Lesenswert?

Gerade noch mal mit der Kombi ohne Modifikationen getestet:

http://ht-deko.com/arduino/pic/stm32_11.jpg

von Stefan F. (Gast)


Lesenswert?

> Welche Version ist das denn?
> Die bei AC6 dabei ist funktioniert.

Hmm, ich verwende AC6. Aber egal, Semihosting will ich ohnehin nicht 
verwenden.

von pegel (Gast)


Lesenswert?

Kannst du mit SWO auch was eingeben? :)

von Alexander Schreber (Gast)


Lesenswert?

Hi Leute,

RTT (Real Time Transfer) kann mit diesem experimentellen Patch 
http://openocd.zylin.com/#/c/4055/ auch mit OpenOCD und jedem Debug 
Adapter verwendet werden.
Im Gegensatz zu SWO (aktuell nur mit J-Link und STLink) können auch 
Daten vom Host zum µC übertragen werden.

Beste Grüße,
Alex

von Zeni (Gast)


Lesenswert?


Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.