gnarr
26.01.2007, 11:25
Hi!
Wie der Titel schon sagt, habe ich 2 kurze Fragen zu C, bzw. AVR-GCC die mir zur Zeit etwas Kopfzerbrechen bescheren.
1) Wieso werden mit volatile definierte Variablen (welche im sourcefile main.c deklariert wurden) in anderen sourcefiles, die Unterprogramme aus main beinhalten, nicht erkannt?
Bsp:
Sourcefile main.c beinhaltet Variablendeklaration
volatile uint8_t test;
int main(void){
blub();
}
Sourcefile blub.c beinhaltet Unterprogramm:
void source(void){
test = 5;
}
Ich erhalte nun eine Fehlermeldung, dass die Variable test nicht deklariert sei. Die Variable ist übrigens als volatile deklariert, da ich sie in einer ISR verwende und anschließend zusätzlich noch in anderen Unterprogrammen auf sie zugreife. Natürlich kann ich alle Unterprogramme auch in einem Sourcefile schreiben, allerdings hatte ich eigentlich vor, mein Programm auf mehrere Sourcefiles zwecks Übersicht aufzuteilen.
Wenn ich die Variable übrigens im Sourcefile erneut deklariere, kann AVRStudio 4 keine .elf Datei erstellen und ich erhalte Warnings aufgrund einer multiple deklaration.
2) Gibt es einen bestimmten Grund, wieso für das Setzen von Bits die Maskierung (Register |= (1<<Bit)) und zum Löschen (Register &= ~(1<<Bit)) verwendet wird - allerdings in keinem Tutorial das Löschen
von Bits unter Verwendung dieser Maksierung erwähnt ist: (Register |= (0<<Bit)) ?
Danke schonmal im Voraus. :-)
Wie der Titel schon sagt, habe ich 2 kurze Fragen zu C, bzw. AVR-GCC die mir zur Zeit etwas Kopfzerbrechen bescheren.
1) Wieso werden mit volatile definierte Variablen (welche im sourcefile main.c deklariert wurden) in anderen sourcefiles, die Unterprogramme aus main beinhalten, nicht erkannt?
Bsp:
Sourcefile main.c beinhaltet Variablendeklaration
volatile uint8_t test;
int main(void){
blub();
}
Sourcefile blub.c beinhaltet Unterprogramm:
void source(void){
test = 5;
}
Ich erhalte nun eine Fehlermeldung, dass die Variable test nicht deklariert sei. Die Variable ist übrigens als volatile deklariert, da ich sie in einer ISR verwende und anschließend zusätzlich noch in anderen Unterprogrammen auf sie zugreife. Natürlich kann ich alle Unterprogramme auch in einem Sourcefile schreiben, allerdings hatte ich eigentlich vor, mein Programm auf mehrere Sourcefiles zwecks Übersicht aufzuteilen.
Wenn ich die Variable übrigens im Sourcefile erneut deklariere, kann AVRStudio 4 keine .elf Datei erstellen und ich erhalte Warnings aufgrund einer multiple deklaration.
2) Gibt es einen bestimmten Grund, wieso für das Setzen von Bits die Maskierung (Register |= (1<<Bit)) und zum Löschen (Register &= ~(1<<Bit)) verwendet wird - allerdings in keinem Tutorial das Löschen
von Bits unter Verwendung dieser Maksierung erwähnt ist: (Register |= (0<<Bit)) ?
Danke schonmal im Voraus. :-)