www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Anfänger: Kleine Frage zum #include - bei Radig Ulrich verstehe ich das nicht,wie das gehen soll


Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

für euch sicher eine leichte Frage  -  ich suche schon seit Stunden:

Ulrich Radig hat eine tolle Stuktur  - nur bei mir geht die nicht:

( habe mal auf das wichtigste gekürzt)
#include <avr/io.h>
#include "analog.h"

int main(void)
{  
       ADC_Init();

       #if USE_ADC
  ANALOG_ON;
       #endif
return(0);
}


so jetzt zwei Fragen:


a) USE_ADC -  wo wird denn das dann definiert ?
b) im Ordner liegen dann die Files:
"analog.h"
"analog.c"

bei mir geht das so wie oben nicht  -  analog.h wird eingebunden.

ABER:  Woher weiß der Compiler jetzt, dass ADC_Init(); in analog.c liegt 
?




BITTE um eine kleine Erklärung

Gruß

Tom

Autor: Christopher G. (cbg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tom schrieb:
> ABER:  Woher weiß der Compiler jetzt, dass ADC_Init(); in analog.c liegt?
Gar nicht. Beim kompilieren (Quellcode zu Objektdatei) werden nur die 
Signaturen der Funktionen und die verwendeten Konstanten benötigt. Diese 
stehen in den Headerdateien, welche mit #include eingebunden werden. 
Will man nun eine ausführbare Datei erstellen, so muss der Objektcode 
noch durch den Linker gejagt werden (ist meistens im Kompilierprogramm 
bereits inkludiert). Wenn nun auch Funktionen aus anderen Modulen 
(andere .c Dateien) verwendet werden, so müssen die entsprechenden 
Objektdateien dazugelinkt werden.

Autor: Stefan B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Um das exakt zu beantworten, müsste man in dem Teil nachsehen, den du 
nicht angegeben hast. Hast du einen Link, wie man an den Teil rankommt 
um nachzusehen?

Das USE_ADC kann an einem von mehreren Orten definiert werden. Gängige 
Orte sind analog.h, das Makefile oder die Compiler Options im AVR 
Studio.

Dem Compiler ist egal wo die Funktion ADC_Init() liegt. Wenn sie nicht 
in der Datei ist wo sie aufgerufen wird, fügt der Compiler bei der 
Kompilierung eine Kennung ein, dass die Funktion von sonstwo 
beizubringen ist.

Wenn du dem Compiler eine analog.c mit der Funktionsdefinition im 
Makefile oder im AVR Studio Projekt angibst, macht er eine Objektdatei 
draus.

Der Linker schaut alle ihm im Makefile oder im AVR Studio Projekt 
angegebenen Objektdateien durch bis er alle Funktionen zusammengeklaubt 
hat. Fehlt dann noch was, mosert der Linker.

Autor: bert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
öffne mal das makefile und schau ob da irgendwo analog.c drin steht

Autor: Tom (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

hier mal die ganzen Files anbei

vielen Dank für eure Hilfe !!!  super


Gruß Tom

Autor: Stefan B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schau dir config.h an. Da ist die Definition von USE_ADC drin (ist auf 0 
definiert). #include "config.h" ist auch das erste lokale Include in dem 
originalen main.c

analog.c steht auch in dem originalen Makefile als Quelldatei des 
Projektes drin.

Tipp, nicht böse gemeint:

Fang bei deinem Erfahrungsstand mit einem kleineren Projekt und mit dem 
AVR-GCC-Tutorial an.

Bei dem Projekt oben hast du nur 2 Möglichkeiten: Es läuft auf Anhieb 
oder es läuft nicht. Leider ist die Wahrscehinlichkeit erstmal gegen 
dich und du hast noch nicht die Erfahrung das Projekt ins Laufen zu 
bekommen, wenn es nicht auf Anhieb läuft.

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Stefan,

nein das "Anfänger" hast Du falsch verstanden  -  ich habe schon viele 
größere Projekte geschrieben  - nur noch nie modularisiert -  daher hab 
ich weder ein makefile (AVR-Studio) noch sonstiges Zeug gebraucht.

Hab eine schöne Seite gefunden:

http://www.avrfreaks.net/index.php?name=PNphpBB2&f...

Gruß

Tom

Autor: Stefan B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na dann Feurio!

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Tom schrieb:
> Hi Stefan,
>
> nein das "Anfänger" hast Du falsch verstanden  -  ich habe schon viele
> größere Projekte geschrieben  - nur noch nie modularisiert -  daher hab
> ich weder ein makefile (AVR-Studio) noch sonstiges Zeug gebraucht.
>
Brauchst Du so direkt auch bei Ulis Webserver nicht, erledigt AVR-Studio 
durchaus ohne Eingriffe.
Versuch Dich durch die Struktur des Webservers etwas hindurch zu kramen, 
leider ist das Projekt genaugenommen nicht ganz so aufgeräumt und 
strukturiert, wie es scheint. Das liegt aber eher daran, daß es 
gewachsen ist und seinen Zweck erfüllt.

Ich sage das aus Sicht eines fast garnicht C-Programmierers (sonst nur 
AVR-ASM), der sowohl den 2. UART des 644P als auch die eigenen 
RFM12-Routinen stabil zum Laufen bekommen hat. :-)

http://www.avr.roehres-home.de/sensoren/i_webserver.html

http://roehre.homeip.net
User test Passwort test

Gruß aus Berlin
Michael

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey Super DANKE,

so liebe ich das Forum  - hab das so + -   jetzt verstanden, wie man die 
Codes strukturiert......


10000 Danke an  vor allem Stefan und Christopher !

Gruß

Tom

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.