Moin Moin,
ich möchte mich mal mit dem SWO von STM32 auseinandersetzen.
Wenn ich es richtig verstanden habe sollte es möglich sein mit SWO eine
komfortabel Debug Schnittstelle zu nutzen.
SWO ist sehr Ressourcen sparend stimmt das?
Ich habe aber noch nicht zu hundert 100%die Möglichkeiten die SWO bietet
verstanden.
Printf ausgaben sollten möglich sein und auch Trace ausgaben von
Variablen ist das so richtig?
Ist es vernünftig SWO mit Atollic zu nutzen?
Wo bekomme ich eine gute Anleitung wie man es richtig macht?
Danke für eure Hilfe
Schönen Sonntag
>SWO von STM32 ... Wenn ich es richtig verstanden habe sollte es möglich sein> mit SWO eine komfortabel Debug Schnittstelle zu nutzen
Ja, ich benutze auch SWD als als physischen Zugangskanal des Debuggers
zu meinen STM32. Als Debug Probe verwende ich J-Link Edu bzw. ein
STM32-Nucleo Board kann man auch als low cost SWD Debug Probe
umkonfigurieren.
>SWO ist sehr Ressourcen sparend stimmt das?
Alles in Hardware.
>Printf ausgaben sollten möglich sein
Möchte man eigenen Trace Output am PC sehen, einfach
angehängte Datei mitkompiliern.
Das normale printf() ruft irgendwann intern _write() zur Ausgabe aus.
__io_putchar() transportiert das ganze dann über SWD zum PC.
Im TrueSTUDIO kannst du dann das Ergebniss in der SWV Console anschauen.
(Nach dem Debug Start den roten Punk (Start Trace) in dem SWV Console
View aktivieren).
Willst du nicht den ganzen printf Overhead haben, dann beim Aufsetzten
des Projekts die Datei tiny_printf.c mitgenerrieren lassen.
Aber meistens reichen die normalen Debug Möglichkeiten aus, alles so wie
man es vom Debugen eines PC Programms gewohnt ist.
Danke für deine Hilfe!
Ich habe jetzt mit dem Tool "STM32 ST-LINK Utility" geschaft die printf
Ausgaben aus zu geben.
Mit dem Atollic true Studio will es noch nicht klappen.
Wenn ich auf den roten Punkt klicke passiert nichts und wenn ich mit dem
grünen Play Button starte wird der rotr Punkt im SWO Consolen Fenster
ausgegraut und mehr passiert nicht.
Hast noch einen Tipp
KM schrieb:> In den SWV Settings (neben dem Roten Punkt) Punkt "ITM Stimulus Ports"> den Port 0 freigeschaltet?
Hatte ich nicht aber auch das hilft nicht.
Jetzt hat es geklappt.
Sehr Komfortabel so zu debuggen.
Macht so wirklich viel Spaß! Alles aus dem Atollicstudio raus.
Wird das Swo auch ausgeführt wenn kein Adapter an der Hardware hängt?
Stefan ⛄ F. schrieb:> Nein. Der SWO Ausgang wird vom Debugger aktiviert.
Das heißt das das printf im Normal Betrieb keine Belastung für den Stm32
ist?
Danke für die Hilfe
Bildschirmreiniger schrieb:> Das heißt das das printf im Normal Betrieb keine Belastung für den Stm32> ist?
Das kommt darauf an, wie die _write() Methode implementiert wurde. Sie
kann vor der Ausgabe abfragen, ob der SWO Ausgang aktiviert wurde. Und
dann kann sie entscheiden, ob sie warten oder überspringen will.
Wenn man printf mit Platzhaltern benutzt, muss er diese aber auf jeden
Fall abarbeiten, auch wenn die Ausgabe danach gar nicht stattfindet.
Mit
1
ITM_SendChar(c);
kannst du einzelne Zeichen effizienter ausgeben. Wenn die Schnittstelle
deaktiviert ist, überspringt sie das Ausgeben. Innerhalb dieser CMSIS
Funktion kannst du sehen, wie man den Status des Ports abfragt:
Wenn du teure Operationen zum generieren/formatieren des Strings hast,
kannst du das vorher abfragen, bevor du Zeit vergeudest - falls das für
deine Anwendung hilfreich ist.
Stefan ⛄ F. schrieb:> if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */> ((ITM->TER & 1UL ) != 0UL)) /* ITM Port #0 enabled> */> {> ...> }
Sieht gut aus.
Ben S. schrieb:> Warum eigentlich noch das Atollic True Studio?
Gibt es was besseres? Habe mit Atollic begonnen und bin dabei geblieben.
Lutz schrieb:> Das belastet den Mikrocontroller zur Laufzeit noch einmal um Längen> weniger als SWO. Und man braucht auch keinen Hardwarepin extra> verkabeln.
Wie kommst du darauf, dass das den Controller weniger belastet?
Die ITM ist sozusagen ein zweiter Kern neben dem eigentlichen Kern und
nimmt diesem damit die Arbeit ab. Wie soll das effizienter gehen, in dem
man es mit irgendeiner Library dann doch durch den eigentlichen
Prozessor laufen lässt?
Der große Vorteil von RTT ist wohl eher, dass das auch mit anderen
Architekturen als Cortex-M funktioniert.
Ben S. schrieb:> Warum eigentlich noch das Atollic True Studio?
#OT
Weil in der STM32IDE z.B. (zumindest bei mir) die SFR
(SpecialFunctionRegister) View nicht gegangen ist (Windows, neueste
STM32IDE).
Ich hab stundenlang (mit Hilfe vonn Google versucht das zum laufen zu
bringen und bin dann wieder zu Atollic zurück.
rgds
#/OT
Mal so eine Frage am Rande, warum braucht man heute eigentlich noch
einen Debugger um quasi in den uC zu schauen?
Ich als Laie denke, das meiste sollte doch schon als Simulation lösbar
sein. Gut, vllt bei sehr engen Timings deren Spezifikation problematisch
ist, ok. Aber für analoge Geschichten gibt es Spice etc. warum nicht für
digitales?
Habt einen gesunden Tag!
Blöder Mann ;-) schrieb:
#OT
> als Simulation lösbar
Welchen Simulator für einen STM32F4 kennst Du der eine Zielfrequenz von
180MHz und die dazugehörigen Peripherien mir dieser Taktrate simulieren
kann?
#/OT
rgds
6a66 schrieb:> Weil in der STM32IDE z.B. (zumindest bei mir) die SFR> (SpecialFunctionRegister) View nicht gegangen ist
Du meinst die System Workbench for STM32, nehme ich an. Das funktioniert
bei mir allerdings. Du musst nur diese View allerdings öffnen, bevor du
den Debugger startest, sonst zeigt sie nur die Default Werte an, aber
nicht die aktuellen.
Doch auch diese IDE ist in die Jahre gekommen. Aktuell ist die STM32
Cube IDE. Auch dort funktioniert diese View bei mir.
Stefan ⛄ F. schrieb:> Aktuell ist die STM32> Cube IDE.
#OT
Die meinte ich eigentlich. Bin gerne bereit bei einem Projektschritt das
nochmal zu versuchen.
#/OT
Und das mit SWO werde ich auch bei Gelegenheit angehen. Komme mit dem
Debugger bisher ganz gut zurecht.
rgds
Blöder Mann ;-) schrieb:> Ich als Laie denke, das meiste sollte doch schon als Simulation lösbar> sein.
Zum einen haben die µC zunehmend viele komplexe Funktionen, die zu
simulieren immer komplexer wird. Diese Mühe macht sich kaum noch ein
Entwickler.
Zum Anderen kann so ein Simulator nicht jede beliebig Hardware
simulieren, die an den µC angeschlossen ist. Doch von der hängt das
Verhalten des Programmes ab, dass man simulieren will. Wie willst du
z.B. eine BLDC Motor-Steuerung simulieren, ohne den Motor und die ganze
Mechanik drumherum ebenfalls zu simulieren? Das geht nicht!
Stefan ⛄ F. schrieb:> Du musst nur diese View allerdings öffnen, bevor du> den Debugger startest, sonst zeigt sie nur die Default Werte an, aber> nicht die aktuellen.
#OT
Nee, die hat nur einen Error angezeigt dass das nicht geladen werden
kann (wenn ich mich recht erinnere irgend einen Eclipe oder Java Error,
das war auch bei anderen Views der Fall). Nachdem ich gerade beim
Projektwechsel war hatte ich ein paar Stunden darein investiert und bin
dann wieder zurück anstatt tagelang an dem Punkt rumzueiern. Aber was
soll's, TrueStudio läuft prima.
#/OT
rgds
Ich kombiniere SWO gerne mit mehreren Funktionen:
a) Einer Poer-On LED. Das Programm schaltet die LED nach Initialisierung
der Taktversorgung ein. So erkenne ich, dass der µC "lebt".
b) Im Fall von erkannten Störungen, gibt die LED durch Blinkmuster einen
Fehlercode aus (habe ich von meinem Motorrad abgeguckt).
c) Mit dem Debugger kann ich SWO aktivieren und dann detaillierte
Meldungen auslesen.
Bei der Dreifachen Nutzung dieses Pins kann man nicht über "belegt einen
Pin zusätzlich" meckern.
Mit fällt noch eine vierte Nutzungsmöglichkeit ein:
d) Wenn man eine weiße oder blaue LED verwendet, kann man parallel dazu
einen Jumper platzieren, der von der Firmware abgefragt wird und irgend
eine Sonderfunktion auslöst - zum Beispiel Reset der
Konfigurationsdaten.
Stefan ⛄ F. schrieb:>> Ich als Laie denke, das meiste sollte doch schon als Simulation lösbar>> sein.
Das Thema 100MHz, wer sagt denn, daß eine Simulation in Echtzeit laufen
muss?
>> Zum einen haben die µC zunehmend viele komplexe Funktionen, die zu> simulieren immer komplexer wird. Diese Mühe macht sich kaum noch ein> Entwickler.
Naja, bei Spice gibt es eine Umgebung und dort werden die Parameter
(Bauteildefinitionen) hinterlegt. Dazu gibt es Eingangssignale, die zu
definieren sind. Folglich sollte man die Ausgangssignal simulieren
können.
Natürlich ist das Mühe für den Chipentwickler, aber das war es bei Spice
auch....
>> Zum Anderen kann so ein Simulator nicht jede beliebig Hardware> simulieren, die an den µC angeschlossen ist. Doch von der hängt das> Verhalten des Programmes ab, dass man simulieren will. Wie willst du> z.B. eine BLDC Motor-Steuerung simulieren, ohne den Motor und die ganze> Mechanik drumherum ebenfalls zu simulieren? Das geht nicht!
Ich denke, das sollte zumindest bis zur Schnittstelle zur
Leistungsabteilung doch möglich sein. Da kommt dann digitales heraus...
Blöder Mann ;-) schrieb:> das sollte ... doch möglich sein
Möglich ist alles. Wirtschaftlich aber nicht.
Dennoch gibt es ab und zu Leite, die aus Spaß an der Sache auch
unwirtschaftliche Dinge realisieren. Du kannst in diesem Fall ja mal
damit anfangen. Hopp Hopp!
Stefan ⛄ F. schrieb:> Bei der Dreifachen Nutzung dieses Pins kann man nicht über "belegt einen> Pin zusätzlich" meckern.
Danke für die guten Tipps. Hab' den SWO noch nicht im Programm. Aber das
sind sehr gute Ideen. Und den Pin habe ich ohnehin noch freigelassen.
rgds
Blöder Mann ;-) schrieb:> Aber sorry! Ich will den Thread hier nicht sprengen!
#OT
Wir hatten früher (vor >20J) bei der Entwicklung einer HW-Platform mit
einem ASIC im Nebenraum eine Simulatomaschine für das ASIC (CPU) stehen.
Das war ein Schrank mit der Zielhardware und viel Zusatz-HW für das
ASIC. Schweinsteuer >>100kDM und hat eine extra Klimaanlage benötigt.
War von der Komplexität eher ein STM32F103 ohne Peripherie der simuliert
werden sollte. Also NO WAY für Realtime heute.
#/OT
Der Weg mit den Debuggern ist doch nicht schlecht, warum da was Neues
erfinden?
rgds
6a66 schrieb:> Und den Pin habe ich ohnehin noch freigelassen.
Mache da einfach immer eine bedrahtete weiße LED (mit Vorwiderstand)
dran. Dann hast du alle anderen Optionen für die Zukunft offen.
Zum Reset könnte man in die Bedienungsanleitung schreiben: Verbinden sie
die beiden Drähte der Power-LED und schalten dann das Gerät ein.*
Den SWO Viewer kann man mit einer Haken-Klemme an das Bein hängen.
*) Etwas ähnliches habe ich schon einmal bei einem Modul gemacht, dass
als Kleinserie (einige hundert Stück) produziert wurde. Da musste man
zwei Pins von nebeneinander liegenden Widerständen brücken, um das
Passwort zu löschen. Das hat bisher jeder Anwender verstanden. Ich hatte
dazu bewusst eine Stelle ausgewählt, wo nichts schlimmes passiert, wenn
man abrutscht. Darunter siehst du den Connector für den Debugger.
Blöder Mann ;-) schrieb:> Mal so eine Frage am Rande, warum braucht man heute eigentlich noch> einen Debugger um quasi in den uC zu schauen?
Wer einen Debugger braucht, kann eh nicht programmieren. Das richtige
Tool ist die UART mit endloser Textausgabe, dass wissen wir doch
inzwischen alle ????
Ben S. schrieb:> Wer einen Debugger braucht, kann eh nicht programmieren. Das richtige> Tool ist die UART mit endloser Textausgabe, dass wissen wir doch> inzwischen alle ????
By the way: Man kann die SWO Leitung so konfigurieren, dass ihre Ausgabe
im UART Format stattfindet. Denn Sinn der Sache habe ich aber noch nicht
verstanden, denn man braucht ohnehin einen Debugger, um den Ausgang zu
aktivieren.
Was mir da auch noch unklar ist: Der Trace-SWO Ausgang hat ein paar
Bytes Puffer (z.B. 10) aber zwischen den Buchstaben überträgt er
Null-Bytes. Sind die auch im Puffer, so dass sie dort wertvollen Platz
verschwenden?
Stefan ⛄ F. schrieb:> Mache da einfach immer eine bedrahtete weiße LED (mit Vorwiderstand)> dran. Dann hast du alle anderen Optionen für die Zukunft offen.>> Zum Reset könnte man in die Bedienungsanleitung schreiben: Verbinden sie> die beiden Drähte der Power-LED und schalten dann das Gerät ein.*
Yep, so ähnlich hatte ich das vor - nur nicht bedrahtet und nur für die
Entwicklungsphase :)
Das mit dem Rest Jumper stecken für den Benutzer ist dann nicht so
einfach. Das Gerät wird wasserdicht verschlossen und versiegelt. Da
kommst Du dann nicht mehr ran. Das geht bei mir inwischen über einen
Tastendruck bei PowerUp, da startet das System ohne die EERPOM Daten zu
laden.
Ben S. schrieb:> dass wissen wir doch> inzwischen alle ????
JOU :) Deswegen auch die Diskussionen wie: "Mein Programm geht nicht.
Habe 10 Seiten Code gepostet. Wer hilft mir ???"
rgds
Christopher J. schrieb:> Lutz schrieb:>> Das belastet den Mikrocontroller zur Laufzeit noch einmal um Längen>> weniger als SWO. Und man braucht auch keinen Hardwarepin extra>> verkabeln.>> Wie kommst du darauf, dass das den Controller weniger belastet?> Die ITM ist sozusagen ein zweiter Kern neben dem eigentlichen Kern und> nimmt diesem damit die Arbeit ab. Wie soll das effizienter gehen, in dem> man es mit irgendeiner Library dann doch durch den eigentlichen> Prozessor laufen lässt?>> Der große Vorteil von RTT ist wohl eher, dass das auch mit anderen> Architekturen als Cortex-M funktioniert.
Hast Recht. SWO hat gar keinen Einfluß auf den Controller.
RTT war/ist wesentlich schneller.
Und deutlich einfacher zu nutzen bzw. zu konfigurieren.
Und kann Daten in beide Richtungen transportieren!
Und hat auch ohne angeschlossenen Debugger den gleichen Einfluß bzw. der
selbe Code läuft auch ohne angeschlossenen Debugger.
Lutz schrieb:> SWO hat gar keinen Einfluß auf den Controller.> RTT ist wesentlich schneller.
Also noch schneller als gar keinen Einfluss.
Dann nehme ich drei davon, ist besser als Übertakten.
KM schrieb:> Ja, ich benutze auch SWD als als physischen Zugangskanal des Debuggers> zu meinen STM32. Als Debug Probe verwende ich J-Link Edu bzw. ein> STM32-Nucleo Board kann man auch als low cost SWD Debug Probe> umkonfigurieren.
Hallo wollte die im Beitrag
Beitrag "Re: SWO Atollic True Studio STM32Gute" angehängte Datei
PrintF_SWO_Bridge.h in meinem Projekt einbinden.
Ist dafür eine .h geeignet?
piazza_walter schrieb:> Hallo wollte die im Beitrag> Beitrag "Re: SWO Atollic True Studio STM32Gute" angehängte Datei> PrintF_SWO_Bridge.h in meinem Projekt einbinden.>> Ist dafür eine .h geeignet?
ICH verwende dazu syscall.c