Hallo Leute ich habe einen PIC24HJ128GP506 und definiere mir in einer Headerdatei wie folgt eine globale Variable: //########## Globale Variablen ########## static uint8 mode; static uint8 direction; in einer initfunktion gebe ich ihnen dann die einmaligen startwerte: void initVariables(void){ mode = 'P'; direction = 'u'; } habe dann mit include die oben genannte Headerdatei in die inte´rrupts.c eingebunden. Wenn ich jetzt jedoch einen interrupt vom Timer bekomme und das Programm in die ISR springt, dann steht in meinen beiden Variablen jeweils. '.' drin. wo kommt das her? kennt das jemand?
Mit dem Code Fragment kann man nichts sagen, aber das klingt danach das eine Poninter ins Juhee zeigt und der Speicher da überschrieben wird. Wann wird die init Funktion aufgerufen? Kann auch ein Timing Problem sein.
oder die variablen sind mehrfach vorhanden (Header aus mehre quellen verwendet). Am besten die Variablen in einer C Datei anlege, und in der header extern reinschreiben.
ist doch klar. In jedem C-File, in dem du deinen Header einziehst, wird die Variable neu erzeugt. Du musst deine Variable einmal im Programm definieren und einen Wert zuweisen. static uint8 mode = 'P'; static uint8 direction= 'u'; In deinen anderen Dateien kannst du dann mit extern static uint8; extern static uint8 direction; auf deine Variablen zugreifen. Thomas
Deine sog. 'globalen Variablen' sind in Wirklichkeit keine. Besorg dir bitte ein C-Buch und mach dich schlau, was mit dem Schlüsselwort 'static' ausgedrückt wird. In deinem Programm existieren 2 Variablen namens "mode". Eine in der Source Code Datei, in der auch die Funktion initVariables enthalten ist. Und eine 2-te in der Source Code Datei in der deine ISR enthalten ist. Und wenn du deine Headerdatei in noch 5 andere C-Dateienb inkludierst, bekommt jede einzelne dieser C-Dateien ihren eigenen Satz an File-globalen Variablen namens mode bzw. direction. File-global! aber nicht Programm-global!
Thomas Weyhrauch schrieb: > > static uint8 mode = 'P'; > static uint8 direction= 'u'; > > > In deinen anderen Dateien kannst du dann mit Du musst dann mit > > extern static uint8; > extern static uint8 direction; > > > auf deine Variablen zugreifen. Das wird nicht gehen. Das 'static' muss weg!
Und ein Artikel, wie das mit globalen Variablen wirklich funktioniert, und wie man das bei Headerfiles macht, findet sich in der FAQ http://www.mikrocontroller.net/articles/FAQ#Globale_Variablen_.C3.BCber_mehrere_Dateien
Hallo war kein Copy aste fehler oder so. ich habe die header datei auch so geöffnet, dass keien variablen mehrfach deklariert wurden, allerdings wurde die Variable unter 2 verschiedenen adressen abgelegt, habe es jetgzt mit ner externen deklaration gemacht und es funktioniert.
>allerdings wurde die Variable unter 2 verschiedenen adressen abgelegt
Genau das ist der Sinn von "static" - je source-file eine eigene
Adresse.
Oliver
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.