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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.