Hi, ich habe eine c Datei zu meinem Projekt hinzugefügt. In der C Datei sind 3 globale Variablen: uint8_t var1=0,var2=0,var3=0; Sie sind im zugehörigen Header wie folgt aufgeführt: extern uint8_t var1,var2,var3; Ich gebe die dritte in meinem Main an einem Display aus. Die Variablen var1 und var2 Stecken in Funktionen die ich nicht nutze und die auch intern nicht genutzt werden. Ich nutze diese Variablen auch im Main nicht. Nun habe ich ständig wackelnde Werte in der Variablen var3. Ich habe der Displayfunktion im Main einen Festwert übergeben, dann ist es weg. Also an der Ausgabe scheint es nicht zu liegen. Ich habe auch in der c Datei alles in frage kommende auskommentiert, nichts änderte sich bis ich die beiden Variablen var1 und var2 aus der globalen definition gestrichen hatte, dann auf mal: keine Bewegung mehr auf der dritten, obwohl die Variabel var1 und var2 in einer Funktion stecken die wie gesagt nicht genutzt wird. Wie kann soetwas zustande kommen, dass müssen doch irgendwelche Einsellungen am Compiler sein, oder? Gruß, TS
moin, scheint so auszusehen, als ob dein Compiler (welcher auch immer das sein sollte) ggf die initallisierung auf 0 nicht richtig macht oder gar nicht. ggf kommt er mit der schreibweise nicht klar. du hast nicht dummer weise in der main auch eine var3 definiert? dann hätte die nähmlich vorrang. bzw die var1 bis varx an einer bestimmten stelle einfach selber noch mal sauber initallisieren.
danke für die Rückmeldung. Es ist der gcc mit der Optimierung -0s. Nutze das AVR-Studio und programmiere in C. Die Variable ist namentlich im Main nur in der Ausgaberoutine enthalten und auch sonst wird der Name nicht verwendet....hatte soetwas noch nicht... Gruß, TS
es ist bauch ständig Bewegung in der Variablen... also nicht dass sie nicht 0 ist, sie hat ständig andere Werte... Wenn ich die var1 und var2 nicht im Header als extern deklariere bleibt das Problem bestehen, erst wenn ich sie wirklich nicht global habe, dann ist es weg... TS
Im AVRStudio4 kannst du einen DataBreakpoint setzten immer wenn auf die Variable geschrieben wird. Vielleicht ist es irgendein anderer pointer oder aine Bereichüberschreitung eines Array zugriffes. Adib.
wenn ich die FUnktion die ich garnicht nutze komplett auskommentiere, und die Variablen aber global lasse, dann ist es auch weg... obwohl diese Funktion nicht genutzt wird und nicht mal im Header steht. Ich habe der Funktion die var1 und var2 nutzt mal willkührliche Namen gegeben - das Springen bleibt, erst wenn ich sie komplett auskommentier ist alles ok... Kann es sein dass der Compiler die var1 und var2 beim auskommentieren der Funktion die sie nutzt die Variablen nicht mehr beachtet und es sich um eine SPeichergeschichte handelt, also eine Verschiebung o.ä. in einem vielleicht ganz anderen Bereich? TS
Es kann sein, dass Du mal den kompletten Code zeigen solltest. Du hast hier erstmal nur Symptome. Die Ursache für eine ungewollte Veränderung von Variablen berühren die hier vermuteten Gründe und Versuche nicht.
durch auskommentieren von var1 und var2 veränderst du das speicherabbild. var3 wird vermutlich dadurch an eine andere position gelinkt. Schau mal in der map file nach was direkt davor bzw danach kommt. vermutlich irgend ein array oder stack, ... und dort wird vermutlich zu weit nach unten addressiert und var3 manipuliert wird.
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.