PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Atmel Studio modular Programmieren



Che Guevara
10.06.2014, 13:18
Hi,

ich würde gerne anfangen, einzelne Funktionen meines Codes in verschiedene C-Dateien zu packen, um das ganze übersichtlicher zu machen und die Funktionen in mehreren Projekten zu verwenden.
Ist es richtig, wenn ich in die Main-Datei einfach die jeweiligen .h Dateien einbinde?
Also so:

main.c


#include <File1.h>

int main(void)
{
File1funktion1();
while(1)
{
File1funktion2();
}
}


File1.h


int16_t Variable1;
int16_t Variable2;

void File1funktion1(void);
void File1funktion2(void);


File1.c


void File1funktion1(void)
{
Variable1 -= 1;
if(Variable1<10) { Variable1 = 25; }
}

void File1funktion2(void)
{
Variable2 -= Variable1;
}


Ich hoffe, ich hab das richtig verstanden?!
Vielen Dank & Gruß
Chris

robin
10.06.2014, 13:46
In deiner File1.c musst du noch deine File1.h einbinden

Also auch noch mal ein #include <File1.h> an den Anfang

in den header-Dateien kommt noch eine Abfrage ob sie bereits eingebunden wurde, weil sonst gibt es Probleme mit dem Compiler -> die Funktionen sind ja mehrfach vorhanden.

In der Regel definiert man hierzu eine Konstante, die den Dateinamen. Gibt es sie bereits, ist der Code schon eingebunden. Sieht dann so aus:


#ifndef FILE1_H
#define FILE1_H

... dein Code ...

#endif


Ansonsten sieht es gut aus. Zurnot auch mal nach "C header Dateien" googeln

damfino
10.06.2014, 21:04
wenn File1funktion1 von main aus aufgerufen wird, muss in File1.h das so angegeben werden: "extern void File1funktion1(void);". Damit kann diese Funktion auch ausserhalb von File1.c verwendet werden.
Variablen kommen ins *.c File. Ausnahme ist wenn die Variable von main auch in File1.c verwendet wird, dann aber in File1.h "extern int16_t Variable1;" Das ist die Info dass es die Variable schon gibt und global verwendet wird, ansonsten wird diese neu angelegt und ist unterschiedlich zu Variable1 von main.

LG!

Wsk8
11.06.2014, 20:09
Also auch noch mal ein #include <File1.h> an den Anfang
[/CODE]
#include "File1.h"



wenn File1funktion1 von main aus aufgerufen wird, muss in File1.h das so angegeben werden: "extern void File1funktion1(void);"
Falsch!


Das ist die Info dass es die Variable schon gibt und global verwendet wird, ansonsten wird diese neu angelegt und ist unterschiedlich zu Variable1 von main.
Das würde gar nicht kompilieren, da der der Linker einen Fehler wegen 2 gleichen Variablen ausspuckt.

mfg

Che Guevara
12.06.2014, 00:48
Hi,

danke für die ganzen Infos, ich denke, ich bekomms jetzt hin. Wenn nicht, melde ich mich nochmal.

Gruß
Chris