Hallo Gemeinde Kann mir bitte kurz jemand erklären, warum das hier im AVR Simulator nicht klappt.. void Division (void) { volatile double Dezi = 0.0; //vol nur für Simulator volatile double dummy = 0.0; //vol nur für Simulator dummy = atof("53.34565"); Dezi = 60 / dummy; //<--- ?!?!?!?! } Das die Funktion zweckfrei ist weiß ich. Warum kann ich die Division nicht ausführen. Ob es im uC klappt, kann ich noch nicht sagen. Im Simulator (2) geht es nicht. Grüße Torsten
Hallo, ganz einfach "60" ist eine ganze Zahl (Integer), die Division erfolgt also mit ganzen Zahlen. Das Ergebnis ist bestimmt 60 / 53 = 1, oder ?
Nee klappt auch mit 60.0 nicht. Meinte aber auch Dezi = dummy / 60.0; der SImulator steigt einfach aus ... Im Watch Fenster ist Dezi dann "Not in scope"
Gast
#2919594
Was geht denn nicht? Ingo
Gast
#2919599
Und wenn du einen Cast devor packst? Auf einem AVR geht sowas jedenfalls... Ingo
Hast du eine Optimierung eingeschaltet? Vl hat der Compiler alles wegoptimiert.
Dezi = (float) dummy / 60.1; hatte ich auch schon. Gleicher Effekt. Was passiert ? .... Der gelbe Pfeil vom Simulator verschwindet, obwohl unten rechts "stopped" steht. Im Disassembler Fenster springt er in einen Bereich, der "File not found" heißt. Hab aber nicht genug Ahnung, um das zu deuten.
hat sich erledigt. Das Problem lag mal wieder zwischen den Ohren des Users. Wenn ich mit F11 durchgehe macht er immer nur einen Schritt weiter. Die Division braucht aber 1388 Schritte !!! Mit F10 geht er drüber weg und liefert das Ergebnis Sorry.
Torsten B. schrieb: > Im Watch Fenster ist Dezi dann "Not in scope" Direkt nach "Dezi = dummy / 60.0;" steht eine schließende geschweifte Klammer, das heißt, die Prozedur ist an dieser Stelle zu Ende, und die lokalen (!) Variablen der Prozedur sind nicht mehr im "Blickfeld". Deklarier doch Dezi mal als globale Variable (außerhalb der Prozedur). Unabhängig davon kann es trotzdem sein, dass dein Programm komplett "wegoptimiert" wurde, wie Benjamin schon schrieb. Ein Schlauer Compiler merkt, dass der Code Unsinn ist, weil die Variablen später nicht mehr verwendet werden. Bei "volatile" sollte das aber eigentlich nicht passieren...
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.