Forum: Mikrocontroller und Digitale Elektronik include dateien


von bernd (Gast)


Lesenswert?

Hallo

Ich programmiere ein Mega 8 in C mit dem AVR Studio.
Wie kann man in das Programm include Dateien einbinden (welche Knöpfe 
muss ich drücken)?

Danke

von nicht Gast (Gast)


Lesenswert?

#include "meineDatei.h"

von Martin (Gast)


Lesenswert?

Ohne AVR-Studio zu kennen: Üblicherweise drückt man keine Knöpfe, 
sondern schreibt

#include "blablubb"

einfach selber hin.

von bernd (Gast)


Lesenswert?

Ich habe eine Include Datei geschrieben und möchte diese irgendwo 
ablegen bzw. sie muss vom Linker mit eingebunden werden. Das Einbinden 
im Programm durch die Include Anweisung ist mir klar.

von Lehrmann M. (ubimbo)


Lesenswert?

bernd schrieb:
> Ich habe eine Include Datei geschrieben und möchte diese irgendwo
> ablegen bzw. sie muss vom Linker mit eingebunden werden.

Dann solltest du die Include entweder in dem Ordner ablegen wo die zu 
kompilierende '*.c' gespeichert sind oder der Compiler hat einen 
speziellen Ordner für Includes. Alles weitere verrät das Handbuch / 
Befehlsreferenz deines Compiler.

von Guru (Gast)


Lesenswert?

@ bernd

"Einbinden" ist im Zusammenhang mit AVRStudio und C zumindest ein 
mehrdeutiger, jedenfalls kein eindeutiger Begriff.

Eine der Deutungen wurde hier schon gleich spontan erwähnt.

Mit dem Linker aber hat die include-Datei überhaupt nichts zu tun. Denke 
daran, das #include eine Präprozessoranweisung ist. Sie wird beim 
compilieren durch den Inhalt der Datei ersezt. Dann erst wird übersetzt 
und irgendwannn später gelinkt. Der Linker hat also mit dem Mechanismus 
nichts zu tun.

Die andere ist die Möglichkeit (und für die Arbeit mit einem Projekt 
relevant), die Datei im Projektbaum aufzuführen. Das hat lediglich den 
Zweck diese Datei einfach zum editieren zu erreichen. Auf die Tatsache, 
das die Datei beim compilieren an Stelle der #include-Anweisung 
eingefügt wird hat das folgende keinen Einfluss. (Ich kann hier nur von 
AVRStudio 4 berichten, aber in Version 5 wird es vermutlich ähnlich 
sein.)

Unter View->Toolbars->AVR-GCC (vorausgesetzt Du arbeitest mit AVR-GCC) 
kannst Du ein Fenster aktivieren in dem sämtliche Dateien des Projektes, 
Deine eigenen, als auch die vom Compiler erzeugten aufgelistet sind. Die 
Dateien sind in einem Baum organisiert. Einer der Zweige heisst "Header 
Files". Mit einem Rechts-Klick auf diesem Zweig erscheint ein 
Kontextmenu in dem unter anderem "Add exisiting Header File(s)..." und 
"Create New Header File..." auszuwählen ist. (Das übersetze ich jetzt 
mal nicht).

Dabei kann die inlucde-Datei eigentlich beliebig abgelegt werden. Es 
empfiehlt sich aber, einfach mal eine neue Datei anzulegen und den 
Inhalt der Datei, die Du schon geschrieben hast dort reinzukopieren. 
Dann guck im Projektordner wo die Datei tatsächlich gespeichert wird.

Beachte aber bitte, was ich oben erwähnte. Diese Aktion wirkt sich 
ausschliesslich auf die Tatsache aus, das die Datei in diesem Baum 
angezeigt wird. Nicht darauf ob die Datei beim compilieren 
berücksichtigt wird.
Demnach kann folgendes Problem auftauchen. Du hast die Datei in dem Baum 
hinzugefügt, aber der Compiler meldet, das ein Prototyp oder eine Typ 
nicht bekannt ist. Dann fehlt die entsprechende #include-Anweisung in 
einer oder mehrerer der C-Dateien.
Oder Du hast zwar mit der #include-Anweisung eine Header-Datei 
eingefügt, aber Du kannst sie in dem Baum nicht sehen.

von Oliver (Gast)


Lesenswert?

Am einfachsten legst du die Datei ins Projekt-Haptverzeichnis, dann 
brauchst du gar nichts weiter zu tun. Ansonsten musst du einen 
Include-Pfad in den Project-Settings auf das entsprechende Verzeichnis 
eintragen, oder den Pfad zur Datei in der #include-Anweisung mit 
hinschreiben.

Dem Linker sind die include-Dateien allerdings herzlich egal.

Oliver

von bernd (Gast)


Lesenswert?

O.K.

Ich habe die include Datei jetzt im Menübaum unter Header Files drin 
(serial.h). Und sie ist jetzt auch im Projekt-Hauptverzeichnis zu sehen.
Aber beim compelieren kommt der Fehler:

../Projekt0.c:11:40: error: ..\..\includes\LCD_display.h: No such file 
or directory

von bernd (Gast)


Lesenswert?

Fehlte noch eine Fehlermeldung

Ich habe die include Datei jetzt im Menübaum unter Header Files drin
(serial.h). Und sie ist jetzt auch im Projekt-Hauptverzeichnis zu sehen.
Aber beim compelieren kommt der Fehler:

../Projekt0.c:11:40: error: ..\..\includes\LCD_display.h: No such file
or directory

../Projekt0.c:12:35: error: ..\..\includes\serial.h: No such file or 
directory

von G a s t (Gast)


Lesenswert?

Wie sieht denn deine Include-Anweisung aus?

von Thomas E. (thomase)


Lesenswert?

bernd schrieb:
> Ich habe die include Datei jetzt im Menübaum unter Header Files

Wie ist die denn da reingekommen?

Ich vermute mal unter "AVR GCC" rechte Maustaste auf "Header Files" und 
dann "Add Existing...".

Damit machst du die Datei in der Menüstruktur sichtbar - mehr noch 
nicht.

#include "header.h" reicht nicht. Du musst den ganzen Pfad angeben oder 
du machst dem Compiler den Pfad bekannt:

>>Projekt >>Configuraton Options >>Include Directories

Da trägst du den Pfad ein, in dem sich deine Headerdatei befindet.

mfg.

von Guru (Gast)


Lesenswert?

Es sind hier drei Sachen zu beachten.

1. Die Pfadeinstellungen unter AVRStudio.
2. Die Pfadangabe in der #include-Anweisung.
3. Der tatsächliche Speicherort der Header-Datei.

Deine Fehlermeldung sieht so aus, als wenn der Compiler die 
include-Datei in einem Ordner oberhalb des Projektordners erwartet. 
Das ist zulässig aber ungewöhnlich und durch die Defaults nicht 
abgedeckt.

Die Frage ist nun: Liegt da die Datei? Anscheinend nicht.
Du hast also entweder beim speichern was falsch gemacht oder der Angabe 
des Pfades in der include-Anweisung oder in den Projekteinstellungen 
sind falsch.

Was hier für einen Anfänger etwas blöd ist: Es gibt mehr als einen Weg 
die Pfade einzustellen und anzugeben. Deswegen ist der günstigste 
Ausgangspunkt:
1. Speichere die include-Datei in dem Projektpfad in dem sich auch die 
C-Dateien befinden. (Eigentlich der Default).
2. Gib keine Pfade in der include-Anweisung an
3. Falls Dich das verwirrt: Gib keine Pfade in den Projekteinstellungen 
an. Eigentlich ist das egal.


wenn Dich das nicht weiterbringt:
Poste am besten mal die Pfadeinstellungen unter AVRStudio. Screenshot. 
Bildformate beachten.
Poste am besten mal die Zeile mit der #include-Anweisung.
Poste am bestem mal den kompletten Pfad auf die include-Datei. (Im 
Explorer in der Adresszeile zu sehen.

von G a s t (Gast)


Lesenswert?

Thomas Eckmann schrieb:
> #include "header.h" reicht nicht. Du musst den ganzen Pfad angeben oder
> du machst dem Compiler den Pfad bekannt:

Wenn die Include-Datei im gleichen Ordner wie die Projektdatei liegt, 
geht es ganz ohne irgendwelche Pfadangaben.

Und eine relative Pfadangabe, wie
  #include "Includes\header.h"
tut's natürlich auch.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Bitte bedenken das der GCC sehr wol zwischen Groß- und Kleinschreibung 
unterscheiden kann bei den Pfadangaben.

von bernd (Gast)


Angehängte Dateien:

Lesenswert?

Hier zewei Bilder im Anhang !

von Karl H. (kbuchegg)


Lesenswert?

Dann geh mal von deinem Projektverzeichnis 2 Ebenen höher (denn genau 
das sagen die .. in den Pfadangaben aus: das Vaterverzeichnis) und von 
dort in das Unterverezcihnis "includes". Dort muss dann die Datei 
LCD_display.h liegen.

#include "..\..\includes\LCD_display.h"

da die Pfadangabe mit keinem \ beginnt und auch nicht mit einer 
Laufwerksangabe, ist es eine relative Angabe. Also ausgehend vom 
aktuellen Verzeichnis - deinem Projektverzeichnis.

   ..                      1 Verzeichnisebene rauf
   ..\..                   noch eine Verzeichnisebene höher
   ..\..\includes          von dort in das Subverzeichnis "includes"
   ..\..\includes\LCD_dispkay.h    und dort muss dann die Datei liegen


Da der Compiler sie nicht findet, wird die Datei dort nicht sein. Also 
musst du den Pfad richtig stellen, so dass die Pfadangabe zu dieser 
Datei führt.


(Und stell um Himmels willen deinen Explorer so um, dass er dir die 
Dateiendungen wieder anzeigt. Wird sind Entwickler, wir können mit 
Dateiendungen umgehen. Ganz im Gegenteil ... uns sagen die was und die 
sind wichtig)

von G a s t (Gast)


Lesenswert?

Da "serial.h" im gleichen Verzeichnis wie die Projektdateien liegt, muß 
es im C-Quellcode einfach heißen

 #include "serial.h"

Außerdem wird es eine serial.c geben.

Und dann müßtest du noch klären, in welchem Verzeichnis deine 
LCD-Bibliothek liegt, also wahrscheinlich Dateien namens LCD_display.h 
und LCD_display.c

von bernd (Gast)


Lesenswert?

Vielen Dank für die Hilfe es funktioniert

Danke Danke Danke

von Guru (Gast)


Lesenswert?

Wenn Du jetzt noch so nett wärst, zu beschreiben was falsch war, dann 
hat der Nächste auch noch was davon. :-)

von Karl H. (kbuchegg)


Lesenswert?

Nicht wirklich.
Das Problem ist, dass in Zeiten von Klickibunti die junge Generation mit 
ausgeschriebenen Pfadangaben nichts mehr anfangen kann. Für die sind 
Dinge wie

  ..\..\includes\serial.h

genauso aussagekräftig, wie es für mich Chinesisch ist.
Wer nie gelernt hat mit einer Command-Line umzugehen und damit im 
Verzeichnisbaum zu navigieren, dem sagt das nun mal nichts.
Was früher jeder im kleinen Finger hatte, muss heute die IDE erledigen. 
Nur dass dem C-Compiler die IDE aber sowas von egal ist.

von Guru (Gast)


Lesenswert?

Verzeichnisbaum? Der PET hatte Verzeichnisbäume? ;-)

Ach. Naja. Was noch dazu kommt, ist meiner Ansicht nach, dass so ein 
Compiler/IDE nun mal keine Kaffeemaschine ist, bei der das Versäumnis, 
das Manual zu lesen höchstens zu einem schönen heissen Toast führt.

von Stephan B. (Firma: HSHL) (schmeuki)


Lesenswert?

Hallo
Ich suche nen paar Include Dateien. Weiß jemand wo ich folgende Dateien 
für C runterladen kann ?

fifo.h
adc.h
ars.h
uart.h

Ambesten mit Links den die Seiten die ich gefunden habe, haben keinen 
Download angeboten.



Gruß Stephan

von haha (Gast)


Lesenswert?

@Stephan: LOL you made my day!! Das ist die beste Frage seit Langem!!!

von Stephan B. (Firma: HSHL) (schmeuki)


Lesenswert?

Lachste mich aus ?
Brauche ernst gemeinte Tipps bzw Hilfe

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Die von Dir gesuchten Headerdateien bringen Dir nichts, da sie zu 
irgendwelcher Hardware gehören. Ohne zu wissen, um welche es geht, sind 
sie sinnlos.

Das ist so, als würdest Du eine Zylinderkopfdichtung verlangen, ohne den 
Motor zu erwähnen, für den sie ist.

Obendrein beschreiben die Headerdateien nur Funktionen etc., die 
wiederum in C-Dateien enthalten sind; wenn Du die nicht hast, hast Du im 
Prinzip nur die Originalverpackung einer Zylinderkopfdichtung.

von ... (Gast)


Lesenswert?

Stephan Breuker schrieb:
> Ambesten mit Links den die Seiten die ich gefunden habe, haben keinen
> Download angeboten.

Dann such nochmal.
Hier kann man z.B. eine fifo.h runterladen:
http://www.koders.com/cpp/fid4C34905F7D474969D073A57F234BEFF6CDE7761A.aspx?s=fifo

von Karl H. (kbuchegg)


Lesenswert?

Rufus Τ. Firefly schrieb:

> Das ist so, als würdest Du eine Zylinderkopfdichtung verlangen, ohne den
> Motor zu erwähnen, für den sie ist.

Oder mit anderen Worten.

Diese Dateien findest du im Umfeld dessen, wo du den Source Code geholt 
hast, den du jetzt lauffähig machen willst.

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.