mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem bei Vergleich zweier Variablen


Autor: David (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute, ich hab ein Problem.
Bei der Programmierung eines ATmega128 in C mit AVRGCC hab ich folgendes 
Problem: Ich will gerne zwei Variablen miteinander vergleichen. Hab dazu 
folgeden Code aufgesetzt:

if(sensor_grad <= value_grad)
{
     regel_richtung = 1;
}
else
{
     regel_richtung = 0;
}

im debugger hab ich geprüft, welchen Wert die Variablen sensor_grad und 
value_grad haben, abhängig von meiner äußeren Beschaltung ändern die 
sich... aber, egal, ob value_grad größer oder kleiner sensor_grad ist, 
der macht immer nur den teil regel_richtung = 1...
beide variablen sind vom gleichen typ...
was mache ich falsch?
danke im voraus

Autor: Kai G. (runtimeterror)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>beide variablen sind vom gleichen typ...
Welcher?
Welche Wertebereiche?

Ich empfehle übrigens den ternären Operator, falls verfügbar.

Gruß

Kai

Autor: David (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
der typ ist unsigned char... 0...255

Autor: Kai G. (runtimeterror)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du mal testweise konstante Werte für sensor_grad und value_grad vor 
dem Vergleich eingesetzt? Also den Code auf ein Minimum reduziert?

Ansonsten bräuchte ich das Ergebnis aus dem Disassembler - die 
Eigenheiten von C sind nicht ganz so mein Fachgebiet.

char wird nicht lexikalisch verglichen, oder?

>der macht immer nur den teil regel_richtung = 1...
Auf welche Art hast du das festgestellt?

Muss jetzt auch erstmal im Dunkeln stochern...

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>if(sensor_grad <= value_grad)
>{
>     regel_richtung = 1;
>}
>else
>{
>     regel_richtung = 0;
>}

Wenn avrgcc da Fehler macht würde keines
meiner Programme funktionieren.

Das Problem liegt ganz woanders im Quellcode.

Autor: Jupps (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wahrscheinlich schreibt der Interrupt die sensor_grad und die Variable 
ist nicht als volatile deklariert... schade ;-)

Autor: David (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ähm, wie ist das mit dem volatile

Autor: Fabian B. (fabs)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wenn du eine variable in einem interrupt beschreibst, sie im 
hauptprogramm aber nur liest wird sie vom compiler wegoptimiert weil er 
denkt die wird ja nie geschrieben (gibt aber glaub ich nen warning). 
wenn du die var aber als volaile deklarierst darf der compiler da nicht 
optimieren.

Gruß
Fabian

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
volatile unsigned char sensor_grad;

Autor: David (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
so gehts... krass...
danke für die schnelle hilfe...
frag mich nur, wieso das unser prof. net für nötig hielt, das zu 
erwähnen...
vielen dank, lg :-)

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.