Hi,
ich entwickle und debugge aktuell Software für einen STM32F429 in
Atollic TrueStudio 9.0.1. Debugschnittstelle ist der GDB-Server mit SWD
am STLink.
Wenn ich das Debugging mittels des roten Quadrats in der IDE beende,
bleibt der Controller stehen. Um einen richtigen Reset scheint es sich
jedoch nicht zu handeln, da ich nun einen Output am PWM-Timer sehe und
der GPIO, der die PWM-Endstufe enabled auf "high" geht. Das stellt für
mich ein Problem dar, da ich nicht möchte dass in diesem inaktiven
Zustand meine Endstufe läuft.
Wie nennt man dieses Verhalten/den Zustand? Kann man das in Atollic so
umstellen, sodass der der Controller im Reset festgehalten wird?
vielen Dank
atollic schrieb:> Wenn ich das Debugging mittels des roten Quadrats in der IDE beende,> bleibt der Controller stehen. Um einen richtigen Reset scheint es sich> jedoch nicht zu handeln, da ich nun einen Output am PWM-Timer sehe und> der GPIO, der die PWM-Endstufe enabled auf "high" geht.
Nein, der Controller bleibt offensichtlich nicht stehen, sondern er tut
etwas. Eben das was du ihm per Programm aufgetragen hast zu tun.
Und natürlich handelt es sich nicht um einen Reset. Ein Debugger
resettet von sich aus das Target (wenn überhaupt) nur dann, wenn er das
Programm startet, danach nicht mehr. Wäre auch vollkommen unsinnig.
Und solange es auf keinen Breakpoint trifft, läuft das Programm einfach.
Daran ändert sich auch nix, wenn der Debugger komplett die Fühler
einzieht. Das Programm läuft weiter.
> Das stellt für> mich ein Problem dar, da ich nicht möchte dass in diesem inaktiven> Zustand meine Endstufe läuft.
Es gibt keinen "inaktiven Zustand". Entweder das Programm läuft, oder es
ist angehalten und der Debugger hat die Kontrolle. Allenfalls kannst du
mit dem Debugger einen Reset produzieren, auch wenn der Debugger gerade
nicht die Kontrolle hat. Aber wenn der Debugger nicht mehr verbunden
ist, kann er den Reset nicht halten, dann läuft das Programm los. Wie
nach jedem Reset.
> Wie nennt man dieses Verhalten/den Zustand? Kann man das in Atollic so> umstellen, sodass der der Controller im Reset festgehalten wird?
Nur dadurch, dass du im Debugger einen manuellen Reset auslöst und den
Debugger NICHT beendest. Damit aber wenigstens das wirklich
zuverlässig funktioniert, muss zusätzlich der erste Breakpoint auf der
ersten abzuarbeitenden Instruktion nach einem Reset stehen.
Danke c-hater für deinen Beitrag.
Im Allgemeinen mag das stimmen. In meinem konkreten Fall glaube ich das
nicht. Kennst du den Prozessor und/oder die verwendete
Entwicklungsumgebung aus eigener Erfahrung?
Wenn ich das Programm im Debuggingmodus auf den Controller übertrage und
das Debugging direkt am ersten Breakpoint (vor dem Beginn von main)
abbreche, verhält sich alles wie du es beschrieben hast; das Programm
läuft normal ohne Debugger los.
Wenn Programm jedoch bereits lief tritt das merkwürdige Verhalten auf,
das ich oben beschrieben habe. Der IO-Pin, der für das Enable der
Endstufe verantwortlich ist, wird in nur einer Prozedur gesetzt. Diese
Prozedur wird nur an einer Stelle im Programm aufgerufen und zwar dann,
wenn ein Taster der über Polling abgefragt wird mehr als zwei Sekunden
gedrückt wurde. Warum sollte der Controller also diese Routine anlaufen,
wenn der Taster sicher nicht betätig wird?
atollic schrieb:> Wenn Programm jedoch bereits lief tritt das merkwürdige Verhalten auf,> das ich oben beschrieben habe. Der IO-Pin, der für das Enable der> Endstufe verantwortlich ist, wird in nur einer Prozedur gesetzt. Diese> Prozedur wird nur an einer Stelle im Programm aufgerufen und zwar dann,> wenn ein Taster der über Polling abgefragt wird mehr als zwei Sekunden> gedrückt wurde. Warum sollte der Controller also diese Routine anlaufen,> wenn der Taster sicher nicht betätig wird?
Typischer Anfängerfehler: Du stellst das, von dem du glaubst, was dein
Programm tun müsste, als unbezweifelbar das dar, was es wirklich tut.
Wenn es des aber täte, wozu brauchst du denn dann noch einen Debugger?
Außerdem, um das herauszufinden, müßte man wohl das Programm sehen und
zusätzlich wissen, was genau du alles im Debugger getan hast. Sprich:
angesichts der Tatsache, dass nur du diese beiden Sachen kennst, kannst
nur du das herausfinden...
AS verwendet ja auch den gdb debugger und einiges wird über die 'Lauch
configuration' gesteuert. Da kann man (je nach Debughardware) die
Scripts beim Init anpassen. Habe AS aber nicht mehr installiert und auch
nicht mehr im Kopf was da alles möglich war.
Atollic TrueSTUDIO 9.1.0 mit ST-Link und STM32F103CB löst beim Beenden
der debug session einen Reset aus.
Hier läuft der µC mit einem LCD und ein Sekundencounter wird wieder auf
0 gesetzt.