www.mikrocontroller.net

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


Important announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Thorsten S. (whitejack)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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

Autor: 123 (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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.

Autor: Thorsten S. (whitejack)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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

Autor: Thorsten S. (whitejack)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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

Autor: Adib T. (adib_t)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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.

Autor: Thorsten S. (whitejack)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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

Autor: Noname (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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.

Autor: 123 (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel




Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder GIF-Format hochladen.
Siehe Bildformate
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net