Forum: Mikrocontroller und Digitale Elektronik Nucleo board 401 verliert Programm


von Viktor (Gast)


Lesenswert?

Hallo ich habe ein Problem.

Wenn ich auf mein STM32 Nucleo Board ein Programm drauf flashe 
funktioniert alles wie es sein soll solange ich die USB  Verbindung zum 
PC nicht trenne.

Wenn ich die USB Verbindung vom Board zum PC trenne und danach wieder 
verbinde läuft das Programm auf dem Board nicht mehr. Ich muss dann 
wieder das Programm nochmal über die IDE Workbench auf den Controller 
flashen damit es wieder läuft. Und nach dem Flashen läuft es so lange 
bis ich die USB Verbindung zum PC nicht trenne.

Ich habe das Gefühl der Controller verliert nach dem Trennen der USB 
Verbindung das Programm.

Meine Erwartung ist, der Controller sollte nach dem Trennen der USB 
Verbindung und wieder verbinden der USB Verbindung sich neu starten und 
weiter laufen.

von Felix F. (wiesel8)


Lesenswert?

Viktor schrieb:
> Meine Erwartung ist, der Controller sollte nach dem Trennen der USB
> Verbindung und wieder verbinden der USB Verbindung sich neu starten und
> weiter laufen.

Meine Erwartung ist, dass die Leute den Unterschied zwischen Debug Mode 
(Programm läuft nur mit angschlossener Debug Probe, da Breakpoints 
gesetzt sind und das Programm evtl sogar nur in den RAM geschrieben 
wird) und Release Mode (Programm läuft auch ohne Debug Probe, da fest im 
Flash ohne Breakpoints) kennen.

mfg

: Bearbeitet durch User
von Viktor (Gast)


Lesenswert?

Es kann noch eine andere Ursache haben. Siehe unteren Link.
Es hat was mit dem Nucleo onBoard ST-Link zu tun.

http://www.openstm32.org/forumthread1831?forumId=7&comments_threshold=0&comments_parentId=1831&comments_offset=0&comments_per_page=25&thread_style=commentStyle_threaded

von Dr. Sommer (Gast)


Lesenswert?

Felix F. schrieb:
> Meine Erwartung ist, dass die Leute den Unterschied zwischen Debug Mode
> (Programm läuft nur mit angschlossener Debug Probe, da Breakpoints
> gesetzt sind
Quatsch. Die Breakpoints verschwinden bei einem Power-Cycle. Lediglich 
Flash-Breakpoints bleiben bestehen, aber die Debugger die die 
unterstützen (zB JLink) löschen die auch wieder sofern man das nicht 
gerade hart abwürgt.
> und das Programm evtl sogar nur in den RAM geschrieben
> wird)
Glaube nicht dass jemand "aus Versehen" das Linker-Script und den 
Startup-Code so ändert dass nur in den RAM geschrieben wird...

Der Haupt-Unterschied zwischen Debug & Release sind die Optimierungen. 
Man kann auch Relase-Builds debuggen und Debug-Builds ohne Debugger 
ausführen.

von Florian F. (flof3000)


Lesenswert?

Wie steht denn Boot0?

von Felix F. (wiesel8)


Lesenswert?

Dr. Sommer schrieb:
> Quatsch. Die Breakpoints verschwinden bei einem Power-Cycle. Lediglich
> Flash-Breakpoints bleiben bestehen, aber die Debugger die die
> unterstützen (zB JLink) löschen die auch wieder sofern man das nicht
> gerade hart abwürgt.

Es gibt Hardware UND Software Breakpoints. Die Software Breakpoints 
überschreiben den Code, damit ein Trap für den Debugger ausgelöst wird. 
Und diese Breakpoints sind IMMER im Programm, auch ohne Debugger! Und 
sehr oft wird ein entsprechender Breakpoint am Einsprungspunkt (der 
Main) gesetzt. Dadurch starten viele Programme im Debug Modus nicht.

Dr. Sommer schrieb:
> Glaube nicht dass jemand "aus Versehen" das Linker-Script und den
> Startup-Code so ändert dass nur in den RAM geschrieben wird...

Meistens wird hier gar nichts umgestellt, da die meisten schon glücklich 
sind wenn ihr BlinkyLED läuft und deswegen sind sie auch falsch (für 
einen Release Build)

Dr. Sommer schrieb:
> Der Haupt-Unterschied zwischen Debug & Release sind die Optimierungen.
UND die Einstellungen wie das Programm auf den Controller kommt!


Am besten du schreibst lieber wieder Artikel in der Bravo ;)

mfg

von Dr. Sommer (Gast)


Lesenswert?

Felix F. schrieb:
> Und diese Breakpoints sind IMMER im Programm, auch ohne Debugger!
Spannend. Und wie kommen die da hinein? Man schreibt jeden Breakpoint 
manuell über die "BKPT" Instruktion in den Code?
Also ich mach das immer so: Ich setze in der IDE, während das Programm 
schon läuft, über GDB, Breakpoints. Die J-Link Software setzt 
automatisch die BKPT Instruktion in den Flash. Wenn ich die 
Debug-Session beende macht der J-Link das wieder rückgängig. Das 
erklärt, warum ich schon 1000x Debug-Builds geflasht, debuggt und 
abgebrochen habe, und sie danach immer noch funktioniert haben (ohne 
Debugger!).

Felix F. schrieb:
> Und
> sehr oft wird ein entsprechender Breakpoint am Einsprungspunkt (der
> Main) gesetzt. Dadurch starten viele Programme im Debug Modus nicht.
Meine haben so immer funktioniert.

Felix F. schrieb:
> UND die Einstellungen wie das Programm auf den Controller kommt!
Man kann sowohl Debug- als auch Release-Builds z.B. über den GDB oder 
auch direkt über ST-Link/J-Link Software flashen, das macht keinen 
Unterschied. Man kann sowohl Debug- als auch Release-Builds in den RAM 
oder Flash schreiben.

Florian F. schrieb:
> Wie steht denn Boot0?
Das ist mal ein sinnvoller Hinweis...

von Markus (Gast)


Lesenswert?

Welche Entwicklungsumgebung wird verwendet?

von Felix F. (wiesel8)


Lesenswert?

Dr. Sommer schrieb:
> Spannend. Und wie kommen die da hinein?

The way software breakpoints work is fairly simple. Speaking about x86 
specifically, to set a software breakpoint, the debugger simply writes 
an int 3 instruction (opcode 0xCC) over the first byte of the target 
instruction. This causes an interrupt 3 to be fired whenever execution 
is transferred to the address you set a breakpoint on. When this 
happens, the debugger “breaks in” and swaps the 0xCC opcode byte with 
the original first byte of the instruction when you set the breakpoint, 
so that you can continue execution without hitting the same breakpoint 
immediately.

http://www.nynaeve.net/?p=80

mfg

von Martin H. (mahi)


Lesenswert?

Hmmm... Du widersprichst Dir selbst.

Felix F. schrieb:
> Und diese Breakpoints sind IMMER im Programm, auch ohne Debugger!


Felix F. schrieb:
> the debugger simply writes
> an int 3 instruction (opcode 0xCC) over the first byte of the target
> instruction.


Was denn nun? Schreibt's nun der Debugger oder was anderes? Wenn 
letzteres bleibt die Frage von Dr. Sommer bestehen.

von Felix F. (wiesel8)


Lesenswert?

Martin H. schrieb:
> Hmmm... Du widersprichst Dir selbst.
>
> Felix F. schrieb:
>> Und diese Breakpoints sind IMMER im Programm, auch ohne Debugger!
>
> Felix F. schrieb:
>> the debugger simply writes
>> an int 3 instruction (opcode 0xCC) over the first byte of the target
>> instruction.
>
> Was denn nun? Schreibt's nun der Debugger oder was anderes? Wenn
> letzteres bleibt die Frage von Dr. Sommer bestehen.

Der Debugger überschreibt das erste Byte und flasht dann diesen Code. 
Somit wird immer der "falsche" Code ausgeführt, der erst durch den 
Debugger korrigiert wird. Was ist daran nicht zu verstehen?

Ein "netter" Nebeneffekt ist dabei, dass zum auswechseln von diesem Code 
die Pipeline des Prozessors geleert werden muss, wodurch sich die 
Performance verschlechert, wenn auch nur um wenige Cycles.

mfg

: Bearbeitet durch User
von Mitlesa (Gast)


Lesenswert?

Felix F. schrieb:
> Speaking about x86 specifically,

Ohne weitere Worte.

von Felix F. (wiesel8)


Lesenswert?

Mitlesa schrieb:
> Felix F. schrieb:
>> Speaking about x86 specifically,
>
> Ohne weitere Worte.

Für die ungebildeten Trolle hier nochmal explizit für ARM:


Software instruction breakpoints

For processors that do not support hardware instruction breakpoints, or 
in cases where you have used up all the available hardware breakpoint 
resources, you can use software instruction breakpoints. Software 
breakpoints modify the instruction in memory to create a special value 
that causes the processor to enter debug state when executed. The value 
written to memory depends on the processor you are using. For ARM 
processors, one of the following schemes is used, depending on the 
architecture and processor revision:

http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0498b/CHDFFICJ.html

mfg

von Dr. Sommer (Gast)


Lesenswert?

Felix F. schrieb:
> Der Debugger überschreibt das erste Byte und flasht dann diesen Code.
> Somit wird immer der "falsche" Code ausgeführt, der erst durch den
> Debugger korrigiert wird. Was ist daran nicht zu verstehen?

Aha, der Debugger macht das! D.h. wenn ich das Debug-Binary direkt 
flashe (ohne Debugger) sind keine Breakpoints drin? D.h. das hat nichts 
mit Debug/Release-Build zu tun? (q.e.d)

Und welcher Debugger macht so etwas, und räumt nicht hinter sich wieder 
auf, d.h. ersetzt das BKPT nicht wieder durch die richtige Anweisung? 
Der J-Link tut das jedenfalls, und der ST-Link kann IIRC sowieso keine 
Flash-Breakpoints.

von Markus (Gast)


Lesenswert?

Updaten !

von Felix F. (wiesel8)


Lesenswert?

Dr. Sommer schrieb:
> Aha, der Debugger macht das! D.h. wenn ich das Debug-Binary direkt
> flashe (ohne Debugger) sind keine Breakpoints drin? D.h. das hat nichts
> mit Debug/Release-Build zu tun? (q.e.d)

Deshalb sprach ich auch vom Debug MODE, wo das Binary 
Debugger-freundlich geflasht wird, deshalb auch DEBUG MODE!

Dr. Sommer schrieb:
> Und welcher Debugger macht so etwas

Keiner, aber im DEBUG MODE teilt es die IDE dem Debugger mit, dass er es 
so machen soll!

Hast du überhaupt eine Ahnung wie so ein Debug-Prozess funktioniert??

mfg

von Dr. Sommer (Gast)


Lesenswert?

Ah, jetzt werden wir freundlich.

Ich kenne lediglich deine Wort-Definition von Debug-Mode vs. 
Release-Mode nicht. Alle mir bekannten IDE's nutzen das als 
Unterscheidung ob ohne bzw. mit Optimierungen und Debug-Informationen 
kompiliert wird (also z.B. ob -g -O0 oder -Os -DNDEBUG an den GCC 
übergeben wird).

Was ist denn "Debugger-Freundliches" Flashen? Ich übergebe an den 
JLink.exe die Option -Freundlich? Und wenn ich die nicht übergebe, 
funktionierten die Breakpoints ja anscheinend trotzdem (nach meinem 
üblichen Vorgehen). Woher weiß der Debugger beim Debugger-Freundlichen 
Flashen überhaupt, wo welche Breakpoints sind? Die kommen doch erst 
nachher z.B. über den GDB-Server.

Felix F. schrieb:
> Keiner, aber im DEBUG MODE teilt es die IDE dem Debugger mit, dass er es
> so machen soll!
Und wie? Ich hab beim JLinkGDBServer.exe noch keine Option 
-BehalteFlashBreakpoints gesehen. Noch habe ich jemals so ein Verhalten 
beobachtet (wäre ja, wie wir sehen, völlig Banane).

Felix F. schrieb:
> Hast du überhaupt eine Ahnung wie so ein Debug-Prozess funktioniert??
Du anscheinend auch nicht.

Zeige doch bitte mal ein reproduzierbares Vorgehen mit J-Link oder 
ST-Link, wo du nirgends im Code "BKPT" nutzt, aber dennoch 
Flash-Breakpoints im Controller übrig bleiben (sauberes Beenden 
vorausgesetzt, kein rabiates Trennen der Stromversorgung/JTAG-Leitung).

von Felix F. (wiesel8)


Lesenswert?

Dr. Sommer schrieb:
> Zeige doch bitte mal ein reproduzierbares Vorgehen mit J-Link oder
> ST-Link, wo du nirgends im Code "BKPT" nutzt, aber dennoch
> Flash-Breakpoints im Controller übrig bleiben (sauberes Beenden
> vorausgesetzt, kein rabiates Trennen der Stromversorgung/JTAG-Leitung)

Ich hab auf Keil dazu sogar einen Artikel gefunden:

The standard runtime library links in certain low-level debugging 
routines, i.e. semihosting functions. Legacy ARM emulators supported 
semihosting by responding to the SWIs and BKPTs events. For the 
non-debug (released) version of the application, a programmer would 
retarget these semihosting functions to non-semihosting equivalents.

http://www.keil.com/support/docs/3614.htm


Und jetzt habe ich keine Lust mehr mit einem Troll zu diskutieren, der 
nicht mal die einfachsten Dinge googlen kann und gut gemeinte Ratschläge 
mit seinem völlig falschem Halbwissen aufwiegt. Manche sind halt leider 
unbelehrbar....

mfg

von Dr. Sommer (Gast)


Lesenswert?

Felix F. schrieb:
> The standard runtime library links in certain low-level debugging
> routines, i.e. semihosting functions.

Gut erkannt. Da steht was von "linken". Nicht davon, wie 
geflasht/debuggt wird. Es gibt nämlich schlicht und ergreifend kein 
Debug/Release-Mode für den Debugger.
In dem Artikel geht es um Semihosting, nicht um Breakpoints. Schlaue 
Implementierungen funktionieren auch ohne Debugger. Und normalerweise 
merkt man es auch, wenn man Semihosting aktiviert hat...

Felix F. schrieb:
> Und jetzt habe ich keine Lust mehr mit einem Troll zu diskutieren, der
> nicht mal die einfachsten Dinge googlen kann und gut gemeinte Ratschläge
> mit seinem völlig falschem Halbwissen aufwiegt. Manche sind halt leider
> unbelehrbar....
Ah, wenn man widerlegt wurde bezeichnet man den anderen einfach als 
Troll!

Also ich arbeite schon einige Jahre mit STM32 und habe auch schon viel 
debuggt und geflasht sowie mich mit den Details der Toolchain 
auseinander gesetzt. Ich habe im JLink Manual noch keine -Freundlich 
Option gefunden und auch noch nie gesehen, dass Flash-Breakpoints im 
Controller verbleiben. Statt zu Flamen könntest du ja einfach zeigen wo 
dein "Debugger-freundlich"-Modus herkommt!

von Markus (Gast)


Lesenswert?

Habe ich es hier schon mal erwähnt: ST-Link updaten !

"Both Nucleo 64 boards ( F401RE and L476RG ) are working now as they are 
expected ( from my side ;) )
The problem of the F401RE with the "mass storage download" was an 
on-board ST-LINK V2 proplem: I had to update it with the "STM32 ST-LINK 
Utility" then it was working correct."

von Felix F. (wiesel8)


Lesenswert?

Dr. Sommer schrieb:
> Ah, wenn man widerlegt wurde bezeichnet man den anderen einfach als
> Troll!

Was hast du denn widerlegt kleiner Sommertroll?? Im gegensatz zu dir 
hinterlege ich meine Aussagen mit vernünftigen Quellen. Von dir kam nur 
heiße Luft, und davon gibt es aktuell schon genung...

Dr. Sommer schrieb:
> Gut erkannt. Da steht was von "linken". Nicht davon, wie
> geflasht/debuggt wird. Es gibt nämlich schlicht und ergreifend kein
> Debug/Release-Mode für den Debugger.
> In dem Artikel geht es um Semihosting, nicht um Breakpoints. Schlaue
> Implementierungen funktionieren auch ohne Debugger. Und normalerweise
> merkt man es auch, wenn man Semihosting aktiviert hat...

Seit wann geht es hier um Breakpoints?? Es geht hier darum, dass das 
Programm nicht startet und da kann Semihosting genauso schuld sein. 
Breakpoints waren nur mein erster Einfall. Also lenke nicht schon wieder 
vom Thema ab!

Dr. Sommer schrieb:
> Also ich arbeite schon einige Jahre mit STM32 und habe auch schon viel
> debuggt und geflasht sowie mich mit den Details der Toolchain
> auseinander gesetzt. Ich habe im JLink Manual noch keine -Freundlich
> Option gefunden und auch noch nie gesehen, dass Flash-Breakpoints im
> Controller verbleiben. Statt zu Flamen könntest du ja einfach zeigen wo
> dein "Debugger-freundlich"-Modus herkommt!

Die Segger Toolchain ist doch ein Abklatsch von Crossworks. Also eine 
All-in-One IDE für Leute ohne wirklich Ahnung, da prinzipiell alles 
geregelt wird, deshalb funktioniert es auch bei dir tadellos. Und hier 
sieht man auch, dass du dich eben nicht mit dem ganzen Debug-Prozess 
befasst hast, sondern nur Knöpfchen auf vorgefertigten IDEs drücken 
kannst.

Markus schrieb:
> Habe ich es hier schon mal erwähnt: ST-Link updaten !
>
> "Both Nucleo 64 boards ( F401RE and L476RG ) are working now as they are
> expected ( from my side ;) )
> The problem of the F401RE with the "mass storage download" was an
> on-board ST-LINK V2 proplem: I had to update it with the "STM32 ST-LINK
> Utility" then it was working correct."

Das wird dem TE nichts bringen! Er muss sein Programm korrekt flashen!

mfg

: Bearbeitet durch User
von Dr. Sommer (Gast)


Lesenswert?

Felix F. schrieb:
> Im gegensatz zu dir
> hinterlege ich meine Aussagen mit vernünftigen Quellen. Von dir kam nur
> heiße Luft, und davon gibt es aktuell schon genung...
ALso hier nochmal schriftlich:
https://www.segger.com/downloads/jlink/UM08001_JLink.pdf
Hier ist das User Manual vom J-Link. Ich finde da kein 
"Debugging-Freundliches" Flashen.
Dass die Breakpoints automatisch wieder gelöscht werden steht da leider 
tatsächlich nicht, aber das kann man ja leicht ausprobieren.

Zeige du doch mal eine Quelle, wo der "Debug/Release-Mode" beim 
Debuggen dokumentiert ist.

Felix F. schrieb:
> Seit wann geht es hier um Breakpoints??
Seit deinem 1. Beitrag:

Felix F. schrieb:
> (Programm läuft nur mit angschlossener Debug Probe, da Breakpoints
> gesetzt sind

Felix F. schrieb:
> Es geht hier darum, dass das
> Programm nicht startet und da kann Semihosting genauso schuld sein.
Das kann wirklich sein. Aber das hat wenn schon was mit 
Debug/Release-Builds zu tun (Quelle hast du ja selbst gefunden), und 
nicht mit Debug/Relase "Debugging Modes", den es nicht gibt (siehe 
JLink-Manual).

Felix F. schrieb:
> deshalb funktioniert es auch bei dir tadellos
Die benutze ich überhaupt nicht.

Felix F. schrieb:
> Und hier
> sieht man auch, dass du dich eben nicht mit dem ganzen Debug-Prozess
> befasst hast, sondern nur Knöpfchen auf vorgefertigten IDEs drücken
> kannst.
Woher weißt du das jetzt wieder? Ich arbeite zwar meistens mit eclipse, 
aber ich habe auch schon direkt auf der Konsole mit JLinkGDBServer, 
arm-none-eabi-gdb und GCC gearbeitet und auch mit den 
ST-Link-Äquivalenten und weiß daher durchaus wie das funktioniert. Da 
gibt es jedenfalls keine Option für Debugging-Freundliches Flashen.

von Felix F. (wiesel8)


Lesenswert?

Dr. Sommer schrieb:
> ALso hier nochmal schriftlich:
> https://www.segger.com/downloads/jlink/UM08001_JLink.pdf
> Hier ist das User Manual vom J-Link. Ich finde da kein
> "Debugging-Freundliches" Flashen.
> Dass die Breakpoints automatisch wieder gelöscht werden steht da leider
> tatsächlich nicht, aber das kann man ja leicht ausprobieren.
>
> Zeige du doch mal eine Quelle, wo der "Debug/Release-Mode" beim
> Debuggen dokumentiert ist.

Da ein Nucleo Board einen ST-Link eingebaut hat, sind diese Infos 
ziemlich wertlos. An Umschreibungen wie "Debug-freundlich" ziehen sich 
übrigens nur Sommertrolle auf ;)

Dr. Sommer schrieb:
> Seit deinem 1. Beitrag:

Hier gehts aber um den 1. Beitrag des TEs, und da geht es um "nicht 
starten".

Dr. Sommer schrieb:
> Das kann wirklich sein. Aber das hat wenn schon was mit
> Debug/Release-Builds zu tun (Quelle hast du ja selbst gefunden), und
> nicht mit Debug/Relase "Debugging Modes", den es nicht gibt (siehe
> JLink-Manual).

Debug-Build + Grüner Pfeil = Debugging Mode = Mit Debug-Informationen 
modifiziertes Programm = im Normalfall nicht ohne Debugger lauffähig

Zum 2. mal: JLink ist hier völlig uninteressant das ST-Link

Dr. Sommer schrieb:
> Debugging-Freundliches Flashen.

Sommertroll??


Ich bleibe dabei, der TE hat einen Debug-Build erzeugt und hat dann eine 
Debug-Session gestartet, die einen Debugger zur Ausführung benötigt. 
Evtl. ist das Programm auch im RAM gelandet.

mfg

von Dr. Sommer (Gast)


Lesenswert?

Felix F. schrieb:
> An Umschreibungen wie "Debug-freundlich" ziehen sich
> übrigens nur Sommertrolle auf ;)
Dann erläutere doch mal, was du damit eigentlich meinst. Das bist du uns 
bis jetzt schuldig geblieben. Du erzählst von Funktionen eines Debuggers 
die einfach nicht existieren, und wenn man nachbohrt wirfst du nur noch 
mit Beleidigungen um dich. Top Diskussionverhalten.

Felix F. schrieb:
> Hier gehts aber um den 1. Beitrag des TEs, und da geht es um "nicht
> starten".
Jaja, jetzt noch schnell Rückzieher machen und den eigenen Unfug als 
unwichtig wegwischen.

Felix F. schrieb:
> Debug-Build + Grüner Pfeil = Debugging Mode = Mit Debug-Informationen
> modifiziertes Programm = im Normalfall nicht ohne Debugger lauffähig
Die Debug-Informationen landen überhaupt nicht im Flash, sondern nur in 
der ELF-Datei.
Im Allgemeinen ist das sehr wohl lauffähig (viele Programme sind sogar 
nur so lauffähig, weil die Leute nichtdefiniertes Verhalten von C/C++ 
ausnutzen welches im Release-Modus des Compilers kaputtoptimiert wird). 
Nur wenn man eine dumme Semihosting-Implementation nutzt, evtl nicht.

Felix F. schrieb:
> Ich bleibe dabei, der TE hat einen Debug-Build erzeugt und hat dann eine
> Debug-Session gestartet, die einen Debugger zur Ausführung benötigt.
Das hat auch niemand bezweifelt.

Felix F. schrieb:
> Sommertroll??
Damit hast DU angefangen, ohne es belegen zu können! Wenn du nicht 
diskutieren möchtest, schreibe vielleicht einfach keine frei erfundenen 
Fakten?

von Felix F. (wiesel8)


Lesenswert?

Dr. Sommer schrieb:
> Die Debug-Informationen landen überhaupt nicht im Flash, sondern nur in
> der ELF-Datei.

OK, hier habe ich mich wirklich falsch ausgedrückt. Es sind keine 
Debug-Infos im Code, sondern nur Modifizierungen im Code die dann z.B. 
Traps, Interrupts etc. auslösen, die dann der Debugger auffängt und 
verarbeitet.

Dr. Sommer schrieb:
> Du erzählst von Funktionen eines Debuggers
> die einfach nicht existieren, und wenn man nachbohrt wirfst du nur noch
> mit Beleidigungen um dich. Top Diskussionverhalten.

Softwareinterrupts und Traps zur Behandlung von Breakpoints und 
Interrupts sind z.B. solche Funktionen. Wie soll der Debugger sonst 
debuggen?

mfg

: Bearbeitet durch User
von Dr. Sommer (Gast)


Lesenswert?

Felix F. schrieb:
> Debug-Build + Grüner Pfeil = Debugging Mode
Du kennst dich also auch nur mit bunten Knöpfen aus und weißt nicht was 
im Hintergrund passiert ;-)

von Dr. Sommer (Gast)


Lesenswert?

Felix F. schrieb:
> Softwareinterrupts und Traps zur Behandlung von Breakpoints und
> Interrupts sind z.B. solche Funktionen. Wie soll der Debugger sonst
> debuggen?

Diese Funktion ist im Debugger aber immer aktiv. Dazu braucht es 
keinen "Debug-MODE", wie du es behauptest:

Felix F. schrieb:
> Deshalb sprach ich auch vom Debug MODE, wo das Binary
> Debugger-freundlich geflasht wird, deshalb auch DEBUG MODE!

Und diese Funktionen werden, wie gesagt, bei sauberer Beendigung der 
Session wieder deaktiviert. Sind daher nicht Grund für das Problem.

Ich habe vorhin die JLink Doku bemüht weil der ST-Link ja keinen eigenen 
GDB-Server mitbringt. Aber du darfst gerne auch im Manual vom ST-Link 
oder der zugehörigen GDB-Server von texane/OpenOCD/Atollic den 
sagenumwobenene "Debug MODE" zeigen.

von Viktor (Gast)


Lesenswert?

Hallo Leute,

danke für die vielen Vorschläge. Ich habe Gestern das Problem gefunden.
Es gibt einen Bug im onBoard ST-Link auf dem Board Nucleo F401RE.

Man muss nur den OnBoard ST-Link updaten und das Problem verschwindet 
danach. Das Problem hatte nichts mit Debug oder Release Mode zu tun 
gehabt. Ich habe auch alle Einstellungen im Workbench so gelassen wie 
die waren und nach dem Update des OnBoard ST-Link verschwand das 
Problem.
Ich habe den OnBoard ST-Link über das Programm ST-LINK Utility 
geupdatet.

von Thomas S. (doschi_)


Lesenswert?

Viktor schrieb:
> Es gibt einen Bug im onBoard ST-Link auf dem Board Nucleo F401RE.
>
> Man muss nur den OnBoard ST-Link updaten

Hallo Viktor,
hast Du evtl. einen Link dazu?

von Markus (Gast)


Lesenswert?

>Man muss nur den OnBoard ST-Link updaten und das Problem verschwindet
>danach.

Das habe ich hier in diesem Thread schon zwei mal geschrieben, aber Ihr 
wolltet euch ja lieber streiten ...

von Martin H. (mahi)


Lesenswert?

Können wir uns drauf einigen, dass Felix F. offensichtlich Keil (uVision 
?) verwendet, bei dem im "Debug-Mode" wohl ein immer Software-Breakpoint 
eingebaut wird (von wem auch immer) und das resultierende Binary nicht 
ohne Debugger lauffähig ist?

Der vermutlich deutlich größere Teil der Forumsteilnehmer wird irgendwas 
auf eclipse und gcc basierendes benutzen, bei dem der "Debug Mode" 
lediglich die Compiler-Settings beeinflusst. Das resultierende Binary 
ist uneingeschränkt verwendbar.

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.