Forum: Compiler & IDEs if Abfragen mit AVR


von Dominik (Gast)


Lesenswert?

Ich möchte zwei int-Werte miteinander vergleichen.
Allerdings überspringt AVR Studio die Abfrage immer.
1
int X=0x1f;
2
int Y=0x0f;
3
  
4
if (Y > X)
5
   {
6
      while(X--)
7
      {
8
         PORTA=PORTA+1;
9
      }
10
   }
11
else
12
   {
13
      while(Y--)
14
      {
15
         PORTA=PORTA+1;
16
      }
17
   }

Vll weiß ja jemand wo der Fehler liegt.
Bitte mit Code-Beispiel


PS: Ich habe schon das ganze Forum durchsucht allerding nichts 
gefunden,weswegen ich jetzt einfach poste.

Danke schonmal

von Jean P. (fubu1000)


Lesenswert?

Wahrscheinlich optimiert der Compiler die Abfrage weg, weil er sieht das 
"if" nicht ausgeführt wird, sondern immer "else".

Gruß

von Dominik (Gast)


Lesenswert?

kann man das irgentwie verhindern?
ich bin ja immer noch am entwickeln.
Später soll die Variablen über rs232 vorgegen werden.
Also ist die If-Schleife dann wieder notwendig.

von Falk B. (falk)


Lesenswert?

@  Dominik (Gast)

>kann man das irgentwie verhindern?

Ohne Optimierung compilieren. -O0 (Oh Null).

MFG
Falk

von Matthias L. (Gast)


Lesenswert?

>Später soll die Variablen über rs232 vorgegen werden.

RS232 zuerst einbauen.

von Reinhold (Gast)


Lesenswert?

Hallo,

Was soll eigentlich diese Zeile machen ???
1
while(Y--)

Soweit ich weiß wird innerhalb einer while-Anweisung ein Vergleich 
durchgeführt der nur WAHR oder FALSCH zurückliefert. Bei WAHR wird der 
nachfolgende Code ausgeführt, bei FALSCH wird er übersprungen.

Y-- entspricht aber Y = Y - 1 liefert somit einen Zahlenwert zurück. 
Keine Ahnung was der Compiler daraus macht! Vielleicht liegt hier ja 
dein Problem.

Aber ich lass mich gern eines besseren belehren.

Gruß
Reinhold

von ... .. (docean) Benutzerseite


Lesenswert?

die while(x--) ist schon ok... c kann ja mehrfach Anweisungen ;)

Es wird es x getestet ob es wahr ist dann um eins verringert und dann 
die schleife ausgeführt..

x ist solange wahr solange x nicht Null ist...

Die Schelife wird halt x-mal ausgeführt...
(Fast wie eine for Schleife das Ding)

von Reinhold (Gast)


Lesenswert?

Wieder was dazugelernt ;-)

von Klaus (Gast)


Lesenswert?

@Dominik: Du muss gar nicht verhindern, dass der Compiler das 
rausoptimiert. Denn das was der Compiler daraus macht, tut im Endeffekt 
genau das, was du programmiert hast.

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.