problem mit variablen definieren

#3392176
Lesenswert?

Hallo ich hoffe diese Frage gehört in dieses Forum, weil ich noch neu 
hier bin und mich noch nicht so auskenne...

Ich habe ein Problem mit den Variablen. Immer wenn ich eine Variable im 
atmel studio deklariere funktioniert sie nie... .

Im Anhang ist einen kleines Testprogramm, dass nicht funktioniert und 
ich weiß nicht warum:
1)Wenn der Simulator läuft, werden die Variablen "ignoriert" und mit der 
Funktion ADD WATCH, der Variablen, steht "unknown location" -> also sie 
werden nirgens im ram abgelegt.
2)Wenn ich die Zeile "unsighnt char...." zwischen #include und 
Hauptprogramm schreibe, dann liegt x richtig im Ram und pcvar liegt im 
flash auf 0x0000?!?! (ich kann sie auch dann im Programm nicht 
ändern...)

Entweder ich versteh die Deklerationen der Variablen nicht und mache 
selber etwas falsch oder der Compiler macht blösin (weil z.B. mit dem 
C51-compiler in unserer Schule kann man die "speicherorte" selbst 
auswählen [ist das auch mit dem GCC-Compiler möglich?])

Ich wäre dankbar wenn mir jemend MEINEN "Gedankenfehler" ausbessert und 
vieleicht ein paar Tipps über die Speichertypen geben würde, weil mit 
den Datentypen finde ich mich soweit zurrecht.

Danke!
Angehängte Dateien:
Gast #3392206
Lesenswert?

Wie Daniel schon angedeutet hat, merkt der Compiler, daß Dein Programm 
nichts sinnvolles tut. Du weist den Variablen in der SChleife zwar Werte 
zu, aber sonst passiert nichts mit denen -> ergo ignoriert der Compiler 
diese Variablen und legt sie gar nicht erst an. Deshalb kann der 
Debugger sie nicht sehen.

Schau Dir mal die Optimierungseinstellugen Deines Compilers an, die kann 
man auch abschalten. (-O0)
#3392209
Lesenswert?

Hans Wernerle schrieb:

> Entweder ich versteh die Deklerationen der Variablen nicht und mache
> selber etwas falsch oder der Compiler macht blösin

Der Compiler macht keinen Blödsinn.
Aber er optimiert.
Zum Beispiel optimiert er alles weg, was keinen Effekt auf das Programm 
hat, ausser Laufzeit und/oder Speicher zu verbrauchen.

Eine Berechnung, deren Ergebnis für nichts benutzt wird, fliegt raus. 
Weil ja das Ergebnis dieser Berechnung keinen von aussen sichtbaren 
Effekt hat.
Eine lokale Variable, die in keiner Berechnung vorkommt, fliegt raus. 
Weil sie ja offensichtlich eh keiner braucht.
#3392214
Lesenswert?

also das x funktioniert schon, aber das pcvar noch nicht... -> also 
wirds an dem liegen, dass nichts sinvolles gemacht wird ;).

ich sag mal danke, aber kann man die variablen auch manuel definieren, 
ob sie z.B. im Register, Ram... liegen? Oder macht das alles der 
Compiler? Weil wenn ich z.B. das Programm zwischendurch testen will und 
NOCH nichts sinvolles mit den Variablen gemacht habe, könnte ich ja nie 
den Test durchführen...



... und das mit dem Optimierungsgrad werd ich mir mal ansehen, was 
wahrscheinlich dann meine frage über die manuelle definietion erübrigt.
#3392234
Lesenswert?

Hans Wernerle schrieb:

> ich sag mal danke, aber kann man die variablen auch manuel definieren,
> ob sie z.B. im Register, Ram... liegen? Oder macht das alles der
> Compiler?

Im Normalfall: ja, das macht der Compiler. Dazu hat man ihn ja, dass er 
sich um die schmutzigen Dinge kümmert.

> Weil wenn ich z.B. das Programm zwischendurch testen will und
> NOCH nichts sinvolles mit den Variablen gemacht habe, könnte ich ja nie
> den Test durchführen...

Na ja.
Was willst du denn da testen?
Ob der Compiler eine Variable anlegt?
Der legt sie schon an, wenn sie gebraucht wird.

Ich versteh schon, dass du noch Anfänger bist. Aber das was du momentan 
'testen' nennst, ist in Wirklichkeit kein testen. Du 'testest' ja auch 
nicht, ob der Compiler eine for-Schleife richtig umsetzt, sondern gehst 
davon aus, dass er das tut. Sonst wär das ja kein Compiler, wenn er bei 
solchen Kleinigkeiten aussteigen würde.
Schreib einigermassen sinnvolle Programme, zb. die üblichen ersten 
Programme, in denen ein Port auf Ausgang gesetzt wird; häng ein paar LED 
an die Ausgänge und erzeug Muster - zb in dem du ein x inkrementierst 
und an den Port ausgibst. Da hast du mehr davon, als mit solchen 
Primtiv-Tests, die im Grunde nichts aussagen.
#3392273
Lesenswert?

ich muss für meine diplomarbeit in der HTL eh kompliziertere Programme 
machen... aber ich bin nicht so vertraut mit dem Compiler und wollte 
deshalb so kleine Tests durführen, um ein wenig zu lernen was der 
Compiler da tut, bin nämlich vom Assambler gewohnt sich über jeden 
....-dreck sich gedanken zu machen ;)

sag aber trotzdem nochmal Danke und ein Lob für das Forum, weil man da 
sehr schnell die Antworten bekommt!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren