Hallo! Ich steige grad von IAR auf Ecplise + Yagarto + GNU ARM um. Installation habe ich wie in http://www.yagarto.de/howto.html beschrieben vorgenommen und debuggen funktioniert bereits. Problem ist jedoch, dass er jedes Mal einen Fehler ausgibt, wenn ich in main.c eine Funktion in einer anderen C Datei aufrufe. Den Header mit der Funktionsdeklaration habe ich eingebunden und die Pfade passen auch alle. Wenn ich jetzt die gesamte Funktion von der C Datei in den entsprechenden Header (led.h) kopiere, dann funktioniert alles. Wie kann das sein, dass Eclipse meine C Datein nicht mag?
Thomas M. schrieb: > Wenn ich jetzt die gesamte Funktion von der C Datei in den > entsprechenden Header (led.h) kopiere, dann funktioniert alles. Wie kann > das sein, dass Eclipse meine C Datein nicht mag? Du hast deiner Prohektbeschreibung nicht mitgeteilt (makefile?), dass dein komplettes Projekt aus mehreren *.c Dateien besteht. Und nein. Der Fehler enteteht nicht beim Compilieren, sondern beim Linken. http://www.mikrocontroller.net/articles/FAQ#Ich_hab_da_mehrere_.2A.c_und_.2A.h_Dateien._Was_mache_ich_damit.3F
Hmm... danke für den Tipp. Makefiles sind noch ein Fremdwort für mich ;-) Aber es geht trotzdem nicht. Ich habe jetzt led.c im makefile unter # List C source files here SRC = ./src/low_level_init.c \ ./src/led.c ./src/main.c hinzugefügt, jetzt gibt aber Eclipse einen Fehler in der AT91SAM7S256 Lib aus: "first defined here" Diesen Fehler gibt er für jede Funktion in der Lib aus. Komisch ist nur, dass er diesen Fehler hat sobald ich led.c einbinde.
Thomas M. schrieb: > hinzugefügt, jetzt gibt aber Eclipse einen Fehler in der AT91SAM7S256 > Lib aus: "first defined here" Wer oder was ist 'first defined here' Bitte: Lass dir nicht alles aus der Nase ziehen. Fehlermeldungen immer vollständig angeben
Wie sieht die AT91SAM7S256.h aus? Was ist da drinnen?
Das sind die Libs die man bei ATMEL runterladen konnte.
Hol dir die Datei in deinen Editor und ersetze alle "inline" durch "static inline" Du kannst ruhig das globale Replace von deinem Editor benutzen. Und dann compilierst du noch einmal alles neu
Es funktioniert, DANKE!!!! Was ist das Problem mit inline? Gibts eigentlich eine Möglichkeit, dass das Makefile alle C Files im Ordner src automatisch kompiliert ohne dass ich ständig die Datein händisch einfügen muss?
Thomas M. schrieb: > Es funktioniert, DANKE!!!! > > Was ist das Problem mit inline? Das der Compiler ohne das static trotzdem einen Funktionsrumpf dafür anlegen muss, selbst wenn er die Funktion inlined. Der Compiler weiss ja beim Compilieren nicht, ob in allen anderen *.c Dateien die entsprechende Funktion ebenfalls geinlined wird. Mit dem static hingegen weiß der Compiler * Hurra, ich inline die Funktion * Und da sie static ist, kann es auch von ausserhalb keinen Verweis auf diese Funktion geben, daher brauch ich die Funktion auch nicht als Funktion selbst anlegen
Alles klar... Jetzt habe ich noch eine Frage, die passt zwar nicht ganz zu diesem Thread, habe jedoch nichts hilfreiches gefunden und du wirst das sicher wissen. Was muss ich tun um printf, sprintf und dergleichen nutzen zu können? Vermutliche irgendwelche Libs einbinden, Frage ist nur welche und wie macht man das?
suche mal nach den Standardlibs, also stdlib, stdio, usw, und binde sie ein. Robert
Hmm... die Headers sind bereits eingebunden, ich vermute eher, dass ich beim Kompilieren noch zusätzlich etwas einbinden muss, vielleicht bereits vorkompilierte Libs oder dergleichen.
*) Hast du irgendwelche Fehlermeldungen, die du uns vorenthältst? *) stdio.h stdlib.h und ev. auch string.h hast du bereits includiert? *) Libraryies werden beim Linken eingebunden, nicht beim compilieren.
Hallo! Ja, die Headers sind alle inkludiert. Folgende Fehlermeldungen werden ausgegeben, wenn ich ein printf verwende: arm-none-eabi-gcc ./src/startup.o ./src/low_level_init.o ./src/led.o ./src/math.o ./src/twi.o ./src/twid.o ./src/async.o ./src/main.o -mcpu=arm7tdmi -nostartfiles -T./prj/sam7x256_ram.ld -Wl,-Map=test_ram.map,--cref,--no-warn-mismatch -o test_ram.elf c:/programme/yagarto/bin/../lib/gcc/arm-none-eabi/4.5.0/../../../../arm- none-eabi/lib\libc.a(lib_a-sbrkr.o): In function `_sbrk_r': C:\msys\1.0\home\yagarto\newlib-build\arm-none-eabi\newlib\libc\reent/.. /../../../../newlib-1.18.0/newlib/libc/reent/sbrkr.c:60: undefined reference to `_sbrk' c:/programme/yagarto/bin/../lib/gcc/arm-none-eabi/4.5.0/../../../../arm- none-eabi/lib\libc.a(lib_a-writer.o): In function `_write_r': C:\msys\1.0\home\yagarto\newlib-build\arm-none-eabi\newlib\libc\reent/.. /../../../../newlib-1.18.0/newlib/libc/reent/writer.c:58: undefined reference to `_write' c:/programme/yagarto/bin/../lib/gcc/arm-none-eabi/4.5.0/../../../../arm- none-eabi/lib\libc.a(lib_a-closer.o): In function `_close_r': C:\msys\1.0\home\yagarto\newlib-build\arm-none-eabi\newlib\libc\reent/.. /../../../../newlib-1.18.0/newlib/libc/reent/closer.c:53: undefined reference to `_close' c:/programme/yagarto/bin/../lib/gcc/arm-none-eabi/4.5.0/../../../../arm- none-eabi/lib\libc.a(lib_a-fstatr.o): In function `_fstat_r': C:\msys\1.0\home\yagarto\newlib-build\arm-none-eabi\newlib\libc\reent/.. /../../../../newlib-1.18.0/newlib/libc/reent/fstatr.c:62: undefined reference to `_fstat' c:/programme/yagarto/bin/../lib/gcc/arm-none-eabi/4.5.0/../../../../arm- none-eabi/lib\libc.a(lib_a-isattyr.o): In function `_isatty_r': C:\msys\1.0\home\yagarto\newlib-build\arm-none-eabi\newlib\libc\reent/.. /../../../../newlib-1.18.0/newlib/libc/reent/isattyr.c:58: undefined reference to `_isatty' c:/programme/yagarto/bin/../lib/gcc/arm-none-eabi/4.5.0/../../../../arm- none-eabi/lib\libc.a(lib_a-lseekr.o): In function `_lseek_r': C:\msys\1.0\home\yagarto\newlib-build\arm-none-eabi\newlib\libc\reent/.. /../../../../newlib-1.18.0/newlib/libc/reent/lseekr.c:58: undefined reference to `_lseek' c:/programme/yagarto/bin/../lib/gcc/arm-none-eabi/4.5.0/../../../../arm- none-eabi/lib\libc.a(lib_a-readr.o): In function `_read_r': C:\msys\1.0\home\yagarto\newlib-build\arm-none-eabi\newlib\libc\reent/.. /../../../../newlib-1.18.0/newlib/libc/reent/readr.c:58: undefined reference to `_read' collect2: ld returned 1 exit status make: *** [test_ram.elf] Error 1
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.