Forum: Compiler & IDEs TRACESWO Buffering in Black Magic Probe (BMP) mit swolisten?


von Philip S. (phs)


Lesenswert?

Hallo,

 ich bin dazu über gegangen, Tracing und Logging Informationen nicht 
mehr über UART, sondern über SWO auszugeben. Das funktioniert auch sehr 
gut, sogar mit 2.25 Mbps.

 Allerdings erscheint bei mir die letzte Zeile des Target Output erst 
dann auf dem PC, wenn GDB oder das "swolisten" Programm beendet wird. 
Manchmal erscheint der fehlende Output auch, wenn das Target mit dem 
"run" Befehl neu gestartet wird.

Ich frage mich, warum das so ist und wie ich dafür sorgen kann, dass 
auch die letzte Ausgabe sofort ausgegeben wird. Kann mir jemand einen 
Tipp geben, in welche Richtung ich weiter vorgehen kann?

Ist das Buffering eher im Prinzip des STM32 Embedded Trace Macro (ETM), 
in der BMP Firmware oder im Anzeigeprogramm "swolisten" zu suchen?

Das ganze ist recht ärgerlich da in meinem Setup die letzte Zeile 
typischerweise der "assert()" Output ist und darauf hinweist, wo der 
Fehler liegt.

Beispiel zur Illustration (letzte beide Ausgabe-Zeilen des Targets):
1
(...)
2
[USB] --> UsbCoreViaSTM32F4::handleIrq(irqStatus=0x4000023)
3
void (...) handleModeMismatchIrq() const() @ (...) UsbCore.cpp : 371

Die Zeile #371 besteht nur aus einer Assertion:
1
void
2
UsbCore::handleModeMismatchIrq(void) const {
3
    assert(false);
4
}

Die Assertion löst im Prinzip auf folgendes auf:
1
    (...)
2
    debug_printf("%s() @ %s : %d \r\n%s\r\n", p_func, p_file, p_line, p_msg);
3
4
    while (1) { __NOP(); };

Die debug_printf() Funktion nutzt für jedes auszugebende Zeichen das 
ITM_SendChar() Makro.

Im Debugger sieht man schon, dass das Target in der while(1)-Loop hängt; 
aber der printf() Output davor kommt nicht mehr auf dem PC an.

Falls notwendig, hier noch ein paar Infos zum Setup:

Ich verwende Black Magic Probe (BMP) v1.7.1 auf einem billigen ST-Link 
Clone mit CKS... Fake-STM32F103.

Den SWO Pin (PA10) des BMP/ST-Link Device habe ich über ein direkt am µC 
angelötetes Stück dünne Litze nach außen geführt. Über einen 
angecrimpten Stecker habe ich die Leitung an SWO Pin (PB3) des Target 
angeschlossen.

Das Target Board ist ein STM32F401CC "Black Pill" Board dieser Art: 
https://stm32-base.org/boards/STM32F411CEU6-WeAct-Black-Pill-V2.0.html

Den TRACESWO Output schaue ich mir im Terminal mit
1
swolisten -vd
 unter macOS 10.15 an.

Den SWO Output im Target habe ich grob entlang dieser Anleitung 
implementiert:
https://github.com/blacksphere/blackmagic/blob/master/UsingSWO

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.