Forum: Mikrocontroller und Digitale Elektronik AVR Studio Debuggen von C


von dost0011 (Gast)


Lesenswert?

Hallo,

also ich habe die Version 4.14 vom AVR Studio runtergeladen und versuche 
gerade GCC zu Debuggen.
Das meiste funktioniert für den ATTINY 85 ziemlich gut, es gibt aber ein 
paar Sachen, die überhaupt nicht funktionieren:

- nicht für jede Variable, die berechnet wurde wird ein Wert ausgegeben, 
wenn man mit dem Cursor drüber geht. Manchmal gehts, manchmal nicht - 
keine Ahnung...

- Wenn ich in einer Routine z.B. OCR0A=20; schreibe, dann finde ich 
rechts im I/O View zwar den Timer_Counter_0 mit dem Register OCR0A, da 
steht aber dauerhaft 0 drin, obwohl ich gerade 20 reingeschrieben 
habe...

- Wenn ich eine Warteschleife von 5s simuliere, dann dauert das ca. 3 
Minuten...

Könnt ihr mir weiterhelfen? Eine neuere Version würde ich nur 
installieren, wenn ihr sicher seid, dass es dann auch wirklich besser 
wird.

Vielen Dank!

von Karl H. (kbuchegg)


Lesenswert?

dost0011 schrieb:
> Hallo,
>
> also ich habe die Version 4.14 vom AVR Studio runtergeladen und versuche
> gerade GCC zu Debuggen.
> Das meiste funktioniert für den ATTINY 85 ziemlich gut, es gibt aber ein
> paar Sachen, die überhaupt nicht funktionieren:
>
> - nicht für jede Variable, die berechnet wurde wird ein Wert ausgegeben,
> wenn man mit dem Cursor drüber geht. Manchmal gehts, manchmal nicht -
> keine Ahnung...
>
> - Wenn ich in einer Routine z.B. OCR0A=20; schreibe, dann finde ich
> rechts im I/O View zwar den Timer_Counter_0 mit dem Register OCR0A, da
> steht aber dauerhaft 0 drin, obwohl ich gerade 20 reingeschrieben
> habe...

Beides ist wohl auf die gleiche Ursache zurückzuführen.
Dein Optimizer hat den Code umgestellt bzw. redundante Variablen 
elimniniert.
-> Jagt man optimierten Code in den Debugger, muss man damit rechnen, 
dass die Dinge nicht immer genau so ablaufen, wie man sie programmiert 
hat. Der Optimizer darf den Code umstellen, sofern der Sinn erhalten 
bleibt.
-> Berücksichtigt man das, kann man auch optimierten Code debuggen. Will 
man jedoch haben, dass der Code genau so abläuft, wie man ihn 
geschrieben hat, muss der Optimizer abgeschaltet werden. Damit hat man 
aber das Problem, das man dann wieder nicht exakt den Code debuggt, der 
dann letzten Endes tatsächlich am µC ablaufen wird.

-> Irgendeinen Tod musst du sterben.

> - Wenn ich eine Warteschleife von 5s simuliere, dann dauert das ca. 3
> Minuten...

Das liegt daran, dass der Debugger zur Simulation des AVR in allen 
seinen Einzelheiten mehr Zeit braucht als der reale Prozessor. Siehst du 
dir im Simulator die Simulationszeit an, dann ist die tatsächlich nur um 
5 Sekunden angewachsen.

-> Im Debugger sind Warteschleifen mittels _delay_ms meistens sowieso 
nicht sinnvoll. Den Debugger/Simulator kannst du einsetzen um die 
grundsätzliche Funktionalität zu überprüfen, wenn es aber um Timing in 
der Realzeit geht, hilft nur eines: ab auf den realen Prozessor damit.

von dost0011 (Gast)


Lesenswert?

Danke für die schnelle Info!
Grundsätzlich verstehe ich das mit dem Optimieren.
Allerdings kommt mir das in diesem Fall komisch vor, da die Größen 
später benötigt werden, die kann man nicht wegoptimieren.
Habe nun aber die Optimierung auf 0 gestellt und siehe da, das gleiche 
Problem. Manche Variablen werden gar nicht angezeigt und OCR0A wird 
nicht befüllt, obwohl es in der Praxis funktioniert.
Wer jetzt meint, warum man es überhaupt simuliert, wenn es tut:
Es funktioniert nur ein kleiner Teil, der Rest tut nicht und da würde 
ich mich gerne auf die Simulation verlassen können...

von Karl H. (kbuchegg)


Lesenswert?

dost0011 schrieb:

> Habe nun aber die Optimierung auf 0 gestellt und siehe da, das gleiche
> Problem. Manche Variablen werden gar nicht angezeigt und OCR0A wird
> nicht befüllt, obwohl es in der Praxis funktioniert.

Dann hast du am Simulator wahrscheinlich einen ganz anderen Prozessor 
eingestellt, als der für den du kompilierst.

von dost0011 (Gast)


Lesenswert?

Au Backe, da habe ich was gesagt...
Also die Codeoptimierung war bei mir trotz Rebuild noch drinnen. Sie 
geht erst raus, wenn man am Codefile was verändert, es neu speichert und 
dann ein Rebuild macht. Jetzt ist der Code um 50% größer (Schluck) und 
passt gerade noch rein - und siehe da, jetzt läuft alles so, wie ich es 
programmiert habe :-) Also nochmal vielen Dank für den Tipp.

Da du dich so gut auskennst:
Gibt es eine Möglichkeit, die externen Interrupts vorher zu definieren 
(z.B. eine Liste mit Zeiten, wo ein INT0 auftreten soll)?
Evtl. könnte ich auch von der Software her das Interrupt Flag zu fest 
definierten Zeiten setzen - wenn ich das jetzt auch noch finden würde...
:-)

von spess53 (Gast)


Lesenswert?

Hi

>Gibt es eine Möglichkeit, die externen Interrupts vorher zu definieren
>(z.B. eine Liste mit Zeiten, wo ein INT0 auftreten soll)?
>Evtl. könnte ich auch von der Software her das Interrupt Flag zu fest
>definierten Zeiten setzen - wenn ich das jetzt auch noch finden würde...
>:-)

Suche mal in der Simulator-Hilfe nach 'Simulator2 Stimuli'

MfG Spess

von dost0011 (Gast)


Lesenswert?

No Topic found...

von spess53 (Gast)


Lesenswert?

Hi

>No Topic found...

Liegt vielleicht daran:

>also ich habe die Version 4.14 vom AVR Studio runtergeladen und versuche
>gerade GCC zu Debuggen.

Weshalb nutzt du nicht 4.19?

MfG Spess

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.