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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.