Hallo, ich rufe aus meiner main()-Funktion eine Funktion auf, deren Rückgabewert vom Typ uint32_t ist. Allerdings sind hier jeweils nur die unteren 22 Bit belegt. Der Rückgabewert in der main() ist nur noch 16 Bit breit, obwohl die Variable in der main() als uint32_t deklariert ist. Alternativ habe ich den Wert auch direkt an die Funktion ltoa() übergeben und ein String davon erzeugt. Er ist auch nur 16 Bit breit. "stdint.h" ist sowohl im c-File der main() als auch im c-File der Funktion eingebunden. Achso, es geht um einen Avr & gcc. Die Optimierung habe ich eingeschaltet (-0s) Hat jemand eine Erklärung?
vielleicht wird die Variable von irgendwas überschrieben ? Falsch bemessener String oder sowas...
Ralf schrieb: > Hat jemand eine Erklärung? Beschreib nicht deinen Code, sondern zeig ihn. Das hat gleich mehrere Vorteile * zum einen tippst du dir die Fingern nicht wund * zum anderen muessen wir nicht 100-tausend Details nachfragen * und zu guter letzt können wir auch Fehler sehen, an die du noch gar nicht gedacht hast und deren Umgebung du daher gar nicht beschrieben hast.
> Beschreib nicht deinen Code, sondern zeig ihn.
Den habe ich leider nicht hier. Werde ich aber heute Abend nachholen.
Man kann nur raten...stell den Optimierungslevel auf Q0 und schau es dir noch mal an... und sieh dir mal "volatile" an.. Der Compiler arbeitet bei mit volatile deklarierten Variablen ohne jede Optimierung.... Variable in der Unterfunktion debuggen und anschauen ob hier noch alles stimmt. Aber unbedingt wie schon erwähnt: Code posten! Gruß Choose
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.