Forum: Mikrocontroller und Digitale Elektronik Seltsames Verhalten mit globaler Variable in externer C Datei


von Thorsten S. (whitejack)


Lesenswert?

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

von 123 (Gast)


Lesenswert?

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.

von Thorsten S. (whitejack)


Lesenswert?

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

von Thorsten S. (whitejack)


Lesenswert?

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

von Adib T. (adib_t)


Lesenswert?

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.

von Thorsten S. (whitejack)


Lesenswert?

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

von Noname (Gast)


Lesenswert?

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.

von 123 (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.