mikrocontroller.net

Forum: Compiler & IDEs if Abfragen mit AVR


Autor: Dominik (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich möchte zwei int-Werte miteinander vergleichen.
Allerdings überspringt AVR Studio die Abfrage immer.
int X=0x1f;
int Y=0x0f;
  
if (Y > X)
   {
      while(X--)
      {
         PORTA=PORTA+1;
      }
   }
else
   {
      while(Y--)
      {
         PORTA=PORTA+1;
      }
   }
 

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

Autor: Jean Player (fubu1000)
Datum:

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

Gruß

Autor: Dominik (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Dominik (Gast)

>kann man das irgentwie verhindern?

Ohne Optimierung compilieren. -O0 (Oh Null).

MFG
Falk

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Später soll die Variablen über rs232 vorgegen werden.

RS232 zuerst einbauen.

Autor: Reinhold (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Was soll eigentlich diese Zeile machen ???
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

Autor: ... ... (docean) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Reinhold (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wieder was dazugelernt ;-)

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.