PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : problem beim compilieren (C)



und3r
06.11.2007, 20:53
Hi,

hab mit dem Asuro angefangen und folgendes Problem.Es geht um folgenden SourceCode, ist ja eigentlich nichts berauschendes:

#include "asuro.h"
int main(void) {

init ();
MotorDir(FWD,FWD);
MotorSpeed(120,120);
StatusLED(GREEN);
while (PollSwitch()==0) {
SerWrite("Alles OK!\n",10);
}
MotorSpeed(0,0);
StatusLED(RED);
while (1) {
SerWrite("Aua!\n",5);
}
}

dann compilieren ich mit:
> avr-gcc own.c -c -o own.o -Os -g -mmcu=atmega8

und linke mit:
> avr-gcc own.o -o own.elf -mmcu=atmega8

dann kommt folgender Fehler:

own.o: In function `main':
/home/manuel/asuro/own source/own.c:26: undefined reference to `init'
/home/manuel/asuro/own source/own.c:27: undefined reference to `MotorDir'
/home/manuel/asuro/own source/own.c:28: undefined reference to `MotorSpeed'
/home/manuel/asuro/own source/own.c:29: undefined reference to `StatusLED'
/home/manuel/asuro/own source/own.c:31: undefined reference to `SerWrite'
/home/manuel/asuro/own source/own.c:30: undefined reference to `PollSwitch'
/home/manuel/asuro/own source/own.c:33: undefined reference to `MotorSpeed'
/home/manuel/asuro/own source/own.c:34: undefined reference to `StatusLED'
/home/manuel/asuro/own source/own.c:36: undefined reference to `SerWrite'

Die header Datei asuro.h habe ich im Verzeichnis wo sich auch own.c befindet. Ich verstehe nur nicht warum er mir die definierten Objekte wie z.B. "MotorDir" nicht erkennt, wobei sie ja in der asuro.h stehen. Habe auch schon die asuro.h in das include verzeichnis von avr-gcc kopiert, leider ohne Erfolg.

Ich bin mir sicher das es ein banaler Fehler ist... hab schon einige Howtos über den avr-gcc und C durchgemacht, aber irgendwie steh ich aufm Schlauch. Wäre euch sehr Dankbar um Hife.

HF SHOOTER
06.11.2007, 21:38
Hi

Wenne s ein relativer Pfad ist dann muss das ganze in < und > nicht in "".
"" verwendet man bei absolutem Pfad. Also:

#include <asuro.h>

-oder-

#include "C:\Programme\ABCDEF\include\asuro.h"

mfg
Benny

fluchtpunkt
07.11.2007, 16:34
Wenne s ein relativer Pfad ist dann muss das ganze in < und > nicht in "".
"" verwendet man bei absolutem Pfad. Also:

#include <asuro.h>

-oder-

#include "C:\Programme\ABCDEF\include\asuro.h"
Das ist afaik falsch.


#include <stdio.h>
bedeutet das der Preprozessor die Datei stdio.h aus dem SystemIncludeVerzeichnis (zB C:/WinAVR/avr/include) einfuegt.

#include "asuro.h"
sagt dem Preprozessor das es sich um ein "Userinclude" handelt. Das kannn sowohl relativer als auch absoluter Pfad sein. Es wird standardmaessig in den Userdateien (wo auch der Quellcode gespeichert ist) gesucht.

Man kann via Makefile natuerlich auch weitere Includeverzeichnisse angeben, auch das Userverzeichnis, dann fuehrt #include <asuro.h> auch zum Erfolg.



Edit: Achja, Topic gab es auch noch eins. Muss evtl asuro.c mit kompiliert werden?

und3r
07.11.2007, 17:07
erstmal Danke für euere Anworten,

leider hat ein ändern auf <asuro.h> nichts bewirkt, bleibt beim alten Fehler. Was hat es mit der asuro.c auf sich, wie kann ich die mit einkompilieren? muss ich die auch einfach mit #include einfügen? evtl. ein Makefile schreiben?

fluchtpunkt
07.11.2007, 18:53
Makefile waere schon optimal denke ich. Gab es keine Beispiele beim Asuro? Die Makefiles sind doch bei so "Hobbyanwendungen" meist recht gut dokumentiert.

und3r
07.11.2007, 19:34
alles klar, hab das makefile bearbeitet und nun gehts... nochmal danke :)