Forum: Mikrocontroller und Digitale Elektronik Headerstruktur


von Der M. (naeschd)


Lesenswert?

Hi,

bin ein Neuling in Sachen C und habe ein Problem. Habe auch schon 
ausführlich gegoogelt. Aber bin nicht fündig geworden. Also bitte nicht 
steinigen auch wenn die Frage wahrscheinlich absolut easy für nen 
versierten Programmer ist :-)

Ich habe eine Maindatei (Main.c)
1
#define F_CPU 8000000UL        //CPU-Speed
2
3
#include <avr/io.h>
4
#include <stdint.h>
5
#include <util/delay.h>
6
7
#include "initialisation.h"    //Mein aufzurufendes Headerfile
8
9
int main (void) {         //Hauptprogramm
10
init_pwm();            //Funktion, welche in der initialisieren.c deklariert wird
11
return 0;
12
}
In der initialisation.h führe ich das Prototyping der Funktion durch:
1
#ifndef _INITIALISATION_H
2
#define _INITILAISATION_H
3
4
void init_pwm(void);
5
#endif
In der initialisation.c steht:
1
void init_pwm(void){
2
  DDRD |= (1 << PD0);
3
}
Es wird der Fehler ausgegeben, dass DDRD und PD0 unbekannte Befehle 
sind. Typ ist definiert und die IO-Datei für den Typ steht auch in der 
Ressourcenliste links vom AVR-Studio...

Ich denke es liegt daran, dass ich die Struktur falsch angelegt habe. 
Ich möchte es so machen, dass in der .h das Prototyping steht und in der 
.c dann die Deklarierung der Funktion... Könnt ihr mir da helfen wo da 
welches Include reinmuss.

Danke für eure Hilfe!
Matze

von holger (Gast)


Lesenswert?

>In der initialisation.c steht:

Na dann mach dort auch ein:
#include <avr/io.h>

von Marvin (Gast)


Lesenswert?

Füg mal
#include "initialisation.h"    //Mein aufzurufendes Headerfile
in der "initialisation.c" ein.

von Der M. (naeschd)


Lesenswert?

Ok das mit dem #include <avr/io.h> hat funktioniert. Aber warum? Die ist 
doch schon in dem Hauptprogramm eingefügt... Oder wirkt sich das Include 
nicht auf nen anderes Include aus?

Ist das mit dem #include "initialisation.h" in der initialisation.c denn 
noch nötig?

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

Der Matze schrieb:
> Ok das mit dem #include <avr/io.h> hat funktioniert. Aber warum? Die ist
> doch schon in dem Hauptprogramm eingefügt... Oder wirkt sich das Include
> nicht auf nen anderes Include aus?

Das wirkt sich natürlich nur auf die C-Datei aus in der die 
include-Anweisung steht.

> Ist das mit dem #include "initialisation.h" in der initialisation.c denn
> noch nötig?

Nicht zwingend nötig aber hilfreich da der Compiler dann auf 
unterschiedliche Arguntlisten/Rückgabetypen der Implementierung und 
Deklaration prüfen kann.

Generell sollte es dir helfen wenn du dir klar machst das jede C-Datei 
für sich selbst übersetzt wird und nichts über andere C-Dateien "weiß". 
Das einzige was deine main.c von anderen unterscheidet ist das die dort 
vorhandene main-Funktion als Einsprungpunkt nach einem 
Reset/Programmstart verwendet wird.

Matthias

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
Noch kein Account? Hier anmelden.