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