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
>beide variablen sind vom gleichen typ...
Welcher?
Welche Wertebereiche?
Ich empfehle übrigens den ternären Operator, falls verfügbar.
Gruß
Kai
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...
>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.
Wahrscheinlich schreibt der Interrupt die sensor_grad und die Variable ist nicht als volatile deklariert... schade ;-)
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
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 :-)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.