mikrocontroller.net

Forum: Compiler & IDEs Wie erzeugt mal eine *.a Datei?


Autor: David V. (vergossen)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

als µC-Neuling möchte ich mich nun mit dem Speichern von Dateien auf 
eine SD-Karte beschäftigen,nachdem mir hier viele Menschen dabei 
geholfen haben,  die USART-Schnittstelle richtig zu programmieren.

Also ich habe einen ATMega128 und benutze zum Programmieen das 
AVR-Studio. Das macht ja vieles schon automatisch. An den ATMEga128 
würde ich gern eine SD-Karte anschließen. Den Adapter habe ich mir 
bereits gebastelt. Jedoch habe ich den Adapter nach folgender Webseite 
angefertigt: 
http://www.ulrichradig.de/site/atmel/avr_mmcsd/gfx...
Dadurch kann ich nämlich mein auf 5V betriebenes Board weiter verwenden, 
ohne eine Aufwändige Änderung vornehmen zu müssen.

Nun habe ich folgendes Problem:
In der Anleitung zum Filesystem steht auf Seite 9 unter anderem:
3. Copy Makefile-AVR to Makefile.
MEine Frage dazu ist: Soll ich erstmal das AVR-Studio starten und ein 
neues Projekt starten, was ich beispielsweise SD-Karte nenne? Das 
AVR-Studio legt dann nämlich gleich einige Ordner an und in einem Ordner 
steht auch etwas mit dem Namen Makefile. Soll ich nun dieses Makefile 
löschen und es durch das Makefile-AVR ersetzen und Makefile-AVR dann 
anschließend wieder in Makefile umbennennen? Ich weiß einfach nicht 
genau, was ich da tun soll.

4. Copy conf/config-sample-avr.h to conf/config.h
KAnn ich machen, aber in welchen ordner soll ich das schreiben?

Jetzt kommt das größere Problem:
5. Compile the library ( make lib ). Now you should have libefsl.a in 
the efsl directory.

Wie soll ich dieses make lib machen? Was soll ich da machen, damit mir 
das AVR-Studio so eine *.a Datei erzeugt?

Über eure Hilfe würde ich mich wirklich sehr freuen. Ich komme nämlich 
sonst keinen Schritt weiter.

Viele Grüße,

David

Autor: David V. (vergossen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hätte ich dieses Problem besser in einem Anderen Tehmenbereich gepostet, 
oderwarum antwortet mir keiner?

David

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wirf doch einfach mal einen Blick in den make-File 'lib' - dann wirst du 
sehen, wie eine .a-Datei erzeugt wird.

make ist das Programm, das die Anweisungen ausführt, die efsl/libefsl.a 
erzeugen.

Das .a kommt übrigens von 'archiver' - das ist der Name des 
Unix-Bibliothekverwalters.

Autor: David V. (vergossen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

leider kenne ich mich zu wenig aus mit sowas. eshalb poste ich ja hier. 
Flgendes steht in dem Makefile drin:

////////////////////////////////////////////////////////////////////
COPT=-g3 -Wall -Os -mmcu=atmega128
INCLUDEDIRS=-Iinc -Iconf
CFLAGS=$(COPT) $(INCLUDEDIRS)
CC=avr-gcc
AR=avr-ar
OBJCOPY=avr-objcopy
OBJ=src/efs.o src/plibc.o src/disc.o src/partition.o src/time.o src/fs.o 
src/fat.o src/file.o src/dir.o src/mkfs.o src/debug.o src/ioman.o 
src/ui.o src/extract.o src/interfaces/atmega128.o src/interfaces/sd.o

all: lib

lib: $(OBJ)
  $(AR) rcs libefsl.a $(OBJ)

clean :
  rm -f $(OBJ) libefsl.a
////////////////////////////////////////////////////////////////////

aber leider sagt mir das nichts. Und ich verstehe jetzt immer noch 
nicht, wie ich meine libefsl.a erzeugen kann.
Ich bin Anfänger und benutze unter WindowsXP das AVR-Studio. Habe kein 
Linux.
Wie startet man beispielsweise das Programm Make? Ist es vielleicht 
schon im AVR-Studio implementiert? Muss doch eigentlich, da das 
AVR-Studio automatisch ein Makefile erzeugt.

Wäre um ausführlichere Tipps sehr dankbar.

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Was soll ich da machen, damit mir das AVR-Studio so eine *.a Datei erzeugt?

Nix. AVR-Studio ist dafür das falsche tool. Mit fertigen makefiles kann 
AVR-Studio nichts (oder nicht viel) anfangen.

Wenn du die Dateien so, wie vorgesehen, umbenannt und kopiert hast, 
machts du einfach ein command-Window ("DOS-Box") auf und wechselst damit 
in das entsprechende Verzeichnis. Dann tippst du "make", und der Rest 
sollte alleine gehen.

Wenn deine WINAVR-Installation mit dem fertigen makefile nicht 
funktioniert, bastelst du dir selber ein neues. Das geht am einfachsten 
mit MFile.

Die fertige lib kann dann in AVR-Studio-Projekte eingebunden werden.

Oliver

Autor: David V. (vergossen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Oliver!
Das probiere ich jetzt gleich mal aus. Werde mich wieder melden !
Danke schonmal.
David

Autor: David V. (vergossen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

so jetzt habe ich es geschafft eine libefsl.a-Datei zu erzeugen. Kann 
man den Ordner, in dem sich diese Datei befindet eigentlich nach der 
Kompilierung woanders hinkopieren, oder ist der dann ortsgebunden?

Leider funktioniert das alles nicht so richtig.
Wenn ich im ARV-Studio links unter Headefiles das efs.h hinzufüge, dann 
bekomme ich trotzdem eine Fehlermeldung vom AVR-Studio, die wie folg 
lautet: "efs.h" no such file or directory. Wieso versteht das AVR-Studio 
nicht, dass die Dateien doch vorhanden sind? Ich habe sogar alle 
.h-Dateien in den selben Ordner kopiert, in dem sich auch die .c-Datei 
befindet.

Wäre echt nett, wenn ihr mir mehr Tipps geben könntet.

David

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kannst du die genaue(n) Fehlermeldung(en) mal posten?

Oliver

Autor: David V. (vergossen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi 'Oliver!

Hier die Fehlermeldungen:

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

rm -rf SD-Karte.o  SD-Karte.elf dep/* SD-Karte.hex SD-Karte.eep
Build succeeded with 0 Warnings...
avr-gcc.exe  -mmcu=atmega128 -Wall -gdwarf-2 -O0 -MD -MP -MT SD-Karte.o 
-MF dep/SD-Karte.o.d  -c  ../SD-Karte.c
../SD-Karte.c:1:17: error: efs.h: No such file or directory
../SD-Karte.c:6: warning: return type of 'main' is not 'int'
../SD-Karte.c: In function 'main':
../SD-Karte.c:7: error: 'EmbeddedFileSystem' undeclared (first use in 
this function)
../SD-Karte.c:7: error: (Each undeclared identifier is reported only 
once
../SD-Karte.c:7: error: for each function it appears in.)
../SD-Karte.c:7: error: expected ';' before 'efs'
../SD-Karte.c:8: error: 'EmbeddedFile' undeclared (first use in this 
function)
../SD-Karte.c:8: error: expected ';' before 'file_r'
../SD-Karte.c:12: warning: implicit declaration of function 'debug_init'
../SD-Karte.c:14: warning: implicit declaration of function 'DBG'
../SD-Karte.c:14: warning: implicit declaration of function 'TXT'
../SD-Karte.c:16: warning: implicit declaration of function 'efs_init'
../SD-Karte.c:16: error: 'efs' undeclared (first use in this function)
../SD-Karte.c:20: warning: implicit declaration of function 'file_fopen'
../SD-Karte.c:20: error: 'file_r' undeclared (first use in this 
function)
../SD-Karte.c:24: error: 'file_w' undeclared (first use in this 
function)
../SD-Karte.c:28: warning: implicit declaration of function 'file_read'
../SD-Karte.c:28: warning: suggest parentheses around assignment used as 
truth value
../SD-Karte.c:29: warning: implicit declaration of function 'file_write'
../SD-Karte.c:32: warning: implicit declaration of function 
'file_fclose'
../SD-Karte.c:35: warning: implicit declaration of function 'fs_umount'
../SD-Karte.c:9: warning: unused variable 'i'
../SD-Karte.c: In function 'hang':
../SD-Karte.c:43: warning: implicit declaration of function '_NOP'
make: *** [SD-Karte.o] Error 1
Build failed with 10 errors and 13 warnings...
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++



Gruß,
David

Autor: David V. (vergossen)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
@ Oliver:

Dieses Testprogramm (Siehe Anhang), welches ich mit runtergeladen habe , 
habe ich ausprobiert und dann kamen die Fehlermeldungen, die ich dir 
eben gepostet habe. Ich habe es im AVR-Studio in SD-Karte.c umgetauft, 
da das Gesamtprojekt diesen Namen trägt.

David

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>#include <efs.h>

Versuchs mal mit

#include "efs.h"

efs.h alleine reicht aber noch nicht. Schau da mal
rein welche *.h Dateien noch benötigt werden !

Autor: David V. (vergossen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!
Habe geschaut welche .h-Dateien noch benötigt werden und habe die 
Dateipfade so angepasst, dass sie auch gefunden werden.

Leider kommen nun fogende Fehlermeldungen:

Build started 15.7.2007 at 18:28:08
avr-gcc.exe -mmcu=atmega128  SD-Karte.o     -o SD-Karte.elf
SD-Karte.o: In function `main':
../SD-Karte.c:12: undefined reference to `debug_init'
../SD-Karte.c:14: undefined reference to `debug'
../SD-Karte.c:16: undefined reference to `efs_init'
../SD-Karte.c:20: undefined reference to `file_fopen'
../SD-Karte.c:24: undefined reference to `file_fopen'
../SD-Karte.c:29: undefined reference to `file_write'
../SD-Karte.c:28: undefined reference to `file_read'
../SD-Karte.c:32: undefined reference to `file_fclose'
../SD-Karte.c:33: undefined reference to `file_fclose'
../SD-Karte.c:35: undefined reference to `fs_umount'
make: *** [SD-Karte.elf] Error 1
Build failed with 10 errors and 0 warnings...


Gruß,
David

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du musst die libefsl.a als LIB mit dazulinken.
Wie das im AVRStudio geht weiss ich aber nicht.

Autor: David V. (vergossen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wäre nett, wenn mir einer sagen könnte, wie man die libefsl.a als LIB im 
AVR-Studio mit dazulinken kann.

Autor: David V. (vergossen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So, unter Project->Configuration Options->Libraries kann man per 
Mausklick *.a-Dateien hinzufügen.

Dass das funktionier, habe ich hier gefunden:
Beitrag "Peter Fleurys library einbinden fehlgeschlagen"

Das habe ich dann auch gemacht und siehe da, ich habe nur noch eine 
einzige Fehlermeldung. Wenn mir da jetzt noch einer sagen könnte, was 
das bedeutet, dann habe ich es geschafft, hoffe ich.

Hier die Ausgabe der Fehlermeldung:


rm -rf SD-Karte.o  SD-Karte.elf dep/* SD-Karte.hex SD-Karte.eep
Build succeeded with 0 Warnings...
avr-gcc.exe -I"D:\Eigene Dateien\Eigene 
Dokumente\Uni\Diplomarbeit\Mikrocontroller\Projekte\SD-Karte\conf" 
-mmcu=atmega128 -Wall -gdwarf-2 -O0 -MD -MP -MT SD-Karte.o -MF 
dep/SD-Karte.o.d  -c  ../SD-Karte.c
../SD-Karte.c: In function 'main':
../SD-Karte.c:28: warning: pointer targets in passing argument 3 of 
'file_read' differ in signedness
../SD-Karte.c:28: warning: suggest parentheses around assignment used as 
truth value
../SD-Karte.c:29: warning: pointer targets in passing argument 3 of 
'file_write' differ in signedness
../SD-Karte.c:9: warning: unused variable 'i'
avr-gcc.exe -mmcu=atmega128  SD-Karte.o    -lefsl  -o SD-Karte.elf
c:\winavr-20070525\bin\..\lib\gcc\avr\4.1.2\..\..\..\..\avr\bin\ld.exe: 
cannot find -lefsl
make: *** [SD-Karte.elf] Error 1
Build failed with 1 errors and 4 warnings...


Gruß,
David

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dein Linker findet eine angegebene Datei nicht ("-lefsl")

Autor: David V. (vergossen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann mir einer sagen, woher diese Datei kommt? Müsste ich sie eigentlich 
mit runtergeladen haben? Oder entsteht sie wenn man make macht? Ich 
frage mich, wieso diese Datei nicht da ist. Habe sie mit der Windows 
Suchfunktion gesucht, finde sie aber nicht. Was mache ich denn jetzt?

David

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
David V. wrote:
> KAnn mir einer sagen, woher diese Datei kommt? Müsste ich sie eigentlich
> mit runtergeladen haben? Oder entsteht sie wenn man make macht? Ich
> frage mich, wieso diese Datei nicht da ist.

Vermutlich hast du die in den Linkeroptionen eingetragen? Hier:

> So, unter Project->Configuration Options->Libraries kann man per
> Mausklick *.a-Dateien hinzufügen.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kopiere die libefsl.a einfach mal nach:

WinAVR/avr/lib

Autor: David V. (vergossen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja unter Linkeroptionen habe ich lediglich zusätzlich: libefsl.a 
eingtragen. Danach hatte ich 9 Fehlermeldungen weniger. Aber ich habe 
keine ahnung, wo ich   lefsl finden kann...

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
lefsl kommt vom makefile. Dort wird eine LIB ohne "lib"
und ohne ".a" eingetragen. Also -lefsl.

Autor: David V. (vergossen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey Holger !
Das hat geklappt !
Keine Fehlermeldungen mehr. Sche hier:

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Build started 15.7.2007 at 19:30:31
avr-gcc.exe -mmcu=atmega128  SD-Karte.o    -lefsl  -o SD-Karte.elf
avr-objcopy -O ihex -R .eeprom  SD-Karte.elf SD-Karte.hex
avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" 
--change-section-lma .eeprom=0 --no-change-warnings -O ihex SD-Karte.elf 
SD-Karte.eep || exit 0
c:\WinAVR-20070525\bin\avr-objcopy.exe: there are no sections to be 
copied!

AVR Memory Usage
----------------
Device: atmega128

Program:   23106 bytes (17.6% Full)
(.text + .data + .bootloader)

Data:         50 bytes (1.2% Full)
(.data + .bss + .noinit)


Build succeeded with 0 Warnings...
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Menschenskinder, woher wisst ihr sowas? Lernt man so ein tiefes 
Verständnis durch Erfahrung? Ich mache das hier nämlich seit 1,5 Wochen. 
Bin also Beginner.

Viele Grüße,
David

Autor: David V. (vergossen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
DANKE !!!

Autor: Heinrich H. (Firma: Ich.AG) (hhanff)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
holger wrote:
> Kopiere die libefsl.a einfach mal nach:
>
> WinAVR/avr/lib

Yo... das war's!!!

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sinnvoller: füge eine -L Option beim Linken hinzu, die den Standort
der Anwenderbibliothek(en) angibt.

Autor: Heinrich H. (Firma: Ich.AG) (hhanff)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jörg Wunsch wrote:
> Sinnvoller: füge eine -L Option beim Linken hinzu, die den Standort
> der Anwenderbibliothek(en) angibt.

Richtig. Hier nachgeguckt unter der Option "-L":
http://www.nongnu.org/avr-libc/user-manual/using_tools.html


* -Lpath
Additional location to look for archive libraries requested by -l 
options.

Daraus folgt für meine Projekt das ich in AVR Studio folgendes tun muss:

Projekt -> Customization Options -> Custom Options -> [Linker Options]
und jetzt in dem "Add" - Feld folgendes Eingeben:
-L"C:\proj\Projekt 070525 - AVR-Savvy\src\efsl-0.2.8\test"
und auf Add drücken.

Fertig!

Autor: Frank Lorenzen (florenzen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hendrik H. wrote:

> * -Lpath
> Additional location to look for archive libraries requested by -l
> options.
>
> Daraus folgt für meine Projekt das ich in AVR Studio folgendes tun muss:
>
> Projekt -> Customization Options -> Custom Options -> [Linker Options]
> und jetzt in dem "Add" - Feld folgendes Eingeben:
> -L"C:\proj\Projekt 070525 - AVR-Savvy\src\efsl-0.2.8\test"
> und auf Add drücken.

-L. wäre auch einen Versuch wert. So für die Schreibfaulen ;-).

Autor: Heinrich H. (Firma: Ich.AG) (hhanff)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Frank Lorenzen wrote:
> Hendrik H. wrote:
>
>> * -Lpath
>> Additional location to look for archive libraries requested by -l
>> options.
>>
>> Daraus folgt für meine Projekt das ich in AVR Studio folgendes tun muss:
>>
>> Projekt -> Customization Options -> Custom Options -> [Linker Options]
>> und jetzt in dem "Add" - Feld folgendes Eingeben:
>> -L"C:\proj\Projekt 070525 - AVR-Savvy\src\efsl-0.2.8\test"
>> und auf Add drücken.
>
> -L. wäre auch einen Versuch wert. So für die Schreibfaulen ;-).

Richtig... oder z.B.
-L../

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.