PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Verstänisfrage AVR Studio



Rudolf_H
23.04.2012, 22:10
Hallo !

Als neueinstiger und "C" habe ich ein kleines Problem .
Ich verwende AVR-Studio 5 und habe mal testweise eine Schleife programmiert.
Wenn ich nun die Schleife Debugge ist es mir nicht möglich diese zu verifizieren !

Mein Proble ist das die Variablen nicht angezeigt werden bzw. eine Meldung da steht die ich nicht verstehe :(

22230

Was ich nicht verstehe ist " a Failed getting location list for symbol die# 0x76 Error"
und " b Optimized away Error"

Warum wird die Zeile " b = b + a;" nicht abgearbeitet ?
Er sprint zwischen der Zeile wo der Pfeil ist und der Schleife hin und her .. mehr nicht ...

Danke

Rudolf

Stone
23.04.2012, 22:30
Dir fehlt die while(1) d.h. nach dem a>100 läuft dein Controller Amok
"a" legt er auf ein Arbeitsregister da hat der Debugger Probleme mit, hab auch noch keine Lösung dafür gefunden.
"b" und "c" werden von dir nicht mehr verwendet und der Compiler optimiert sie weg.

Lies dir am besten mal ein AVR GCC Tutorial durch und arbeite das mal ab, da stehen viele wichtige Tips drinnen.


Gruß Matthias

Rudolf_H
24.04.2012, 18:24
Hi !
Danke das Tut hab ich schon studiert , es geht jetzt nicht um das Programm sondern und den Debugger ;)

Noch ein Beispiel :

22233

Die Frage ist, warum wird die Variabel "a" im Watch1 nicht angezeigt ??

ein verwirrter
Rudolf :confused:


> "a" legt er auf ein Arbeitsregister da hat der Debugger Probleme mit, hab auch noch keine Lösung dafür gefunden.
> hab ich Überlesen :-)

Danke !

Rudolf_H
24.04.2012, 19:24
Hi !

So habs rausgefunden warum er die Variablen nicht anzeigt ! :-)

Man muss bei "AVR/GNU Compiler" unter "Optiization" auf none (-O0) einstellen !

dann lüppt es :p

22234

Rudolf

PS: Comment bei DDRA ist falsch, ignorieren !

Stone
24.04.2012, 22:01
Ja, mit der Optimierung gehts, aber das ganze Projekt unoptimiert zu haben nur um die Variable zu sehen ist auch nicht das wahre ;).
Die einfachere Lösung das die Variable angezeigt wird ist die Variable "volatil" zu deklarieren dann legt er sie auf den S-Ram und der Debugger kann sie anzeigen. Das ist aber alles nur rumdoktern und keine richtige Lösung.


Gruß Matthias

Rudolf_H
24.04.2012, 22:31
Hi

Mir ging es nur darum, um Programmierfehler aufzuspüren.
Wenns dann richtig rennt kann ich es wieder umstellen !

Danke

Rudolf

SprinterSB
25.04.2012, 00:47
> Warum wird die Zeile "b = b + a;" nicht abgearbeitet ?

Sie wird abgearbeitet, d.h. der Compiler erzeugt Code, der exakt der C-Spezifikation von "b = b + a" entspricht! Wenn er zB nachweisen kann, daß a = 0 ist und weder a noch b volatile sind, braucht er dafür überhaupt keinen Code zu erzeugen. Eine Addition ist auch unnötig, wenn b vor der Addition 0 ist oder b nach der Addition nicht verwendet wird.

Das Problem in deinem Fall ist aber nicht der erzeugte ausführbare Code, sondern die erzeugte Debug-Information bzw. deren Auswertung.

Zeitgemäße Debugger beziehen Informationen über den Code aus der Debug-Info, nicht etwa aus den vorliegenden Maschineninstruktionen. In letzerem sind nämlich keine Variablennamen, Typen, Typedefs, Quellbezüge, etc. mehr enthalten.

Ergo: Wenn diese Zeile oder Variablen nicht angezeigt werden, dann hast du:

Ein altes bzw. unzureichendes Debug-Format ausgewählt. Um die Anzeige optimierten Codes zu unterstützen, sollte mindestens DWARF-3, besser noch DWARF-4, verwendet werden. Die entsprechende GCC-Optionen zur Erzeugung dieser Debug-Formate lauten -gdwarf-3 bzw. -gdwarf-4
Selbstredend muss der Debugger mit den Debug-Infos zurecht kommen. Wenn irgendwas hakt, sind die Tools, also Compiler und/oder Debugger, veraltet.
Und nochwas: Beim der Fehlersuche sollte immer der Code untersucht werden, der schlussendlich auch zum Einsatz kommt!

Ansonsten kann es schnell passieren, daß man einem Phantom hinterher jagt und es nach Anschalten der Optimierung plötzlich "seltsame, unerklärliche Effekte" gibt, die dann als "Compilerfehler" verbucht werden, in 99.9% der Fälle jedoch Anwendungsfehler bzw. Missachten der C-Spezifikation etc. sind.

Also: Den richtigen Code debuggen, nicht irgendein Mächen-Code.

Rudolf_H
25.04.2012, 20:49
Danke

Werde versuchen mich danach zu richten :-)

Rudolf