@SprinterSB
ich denke, dass du in deinem Muster in source.h von den Zeilen
#ifndef _SOURCE_H_
#define _SOURCE_H_
.
#endif /* _SOURCE_H_ */
sprichst/schreibst.
Nicht das wir uns falsch verstehen.
Ich meinte nicht ein doppeltes includen, auch nicht über verschlungen Pfade (kommt ja doch manchmal vor), sondern das Problem der DEFINITION und DEKLARATION.
Ich stelle mit meinem #define MAIN (Immer NUR im Source mit der main-Funktion!) nur sicher, dass die globalen Variablen nur GENAU EINMAL dann definiert werden wenn der Source mit der main-Funktion diese Headerdatei includet.
Das #ifndef ... , welches du beschreibst, ist natürlich ebenso wichtig. Allerdings nur um keine Warnings wegen doppelten defines zu bekommen. Diese Warnings könnten aber auf alle Fälle ignoriert werden, da ja das selbe aus der gleichen Datei defined wird.
Ich wollte mit meinem Zeug zeigen, dass ich den nicht zu ignorierenden Warning vermeiden kann, wenn ich eben NICHT an 2 Stellen Variablen und deren Datentypen (mal als Definition bzw. als Deklaration) schreiben muss.
Frage an @SprinterSB: In deinem Beispiel Source.c hast du auch die Funktion mache () mit extern void angegeben.
Jetzt kommen ich in's schleudern. Ist das OK, oder ist es nicht sogar falsch hier ein extern anzugeben?
@a//b
Kleines Muster in einfacher Variante:
Datei mit main() und deiner Verarbeitung. (z.B.: test.c)
Code:
char volatile g_flag; // Hier DEFINIERT
void main ()
{
Init ();
g_flag = 0;
while (1)
{
if (g_flag == 1)
{
// Tu das was nötig ist, da der Interrupt das Flag gesetzt hat.
g_flag = 0;
}
}
}
In deiner Datei mit der Interruptfunktion ist folgendes:
Code:
extern char volatile g_flag; // Nur DEKLARIERT
SIGNAL (????)
{
// Nun ist etwas passiert
g_flag = 1;
}
Lesezeichen