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


von Tom (Gast)


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)
1
#include <avr/io.h>
2
#include "analog.h"
3
4
int main(void)
5
{  
6
       ADC_Init();
7
8
       #if USE_ADC
9
  ANALOG_ON;
10
       #endif
11
return(0);
12
}


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

von Christopher G. (cbg)


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.

von Stefan B. (Gast)


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.

von bert (Gast)


Lesenswert?

öffne mal das makefile und schau ob da irgendwo analog.c drin steht

von Tom (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

hier mal die ganzen Files anbei

vielen Dank für eure Hilfe !!!  super


Gruß Tom

von Stefan B. (Gast)


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.

von Tom (Gast)


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&file=viewtopic&t=48535&postdays=0&postorder=asc&sid=9098c3a3c0cdfcdafbd8187255136d26

Gruß

Tom

von Stefan B. (Gast)


Lesenswert?

Na dann Feurio!

von Michael U. (amiga)


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

von Tom (Gast)


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

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.