Headerstruktur

OP #1458034
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
OP #1458073
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?
Persönliche Seite #1458090
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.