Typabhängiges Linken

OP #509542
Lesenswert?
• ▲
▼
Ich habe mir ein paar Libraries mit nützlichen, kleinen Funktionen 
gebastelt, so dass diese bei Bedarf automatisch hinzugelinkt werden.
Da die Funktionen recht einfach waren, waren die zu alle AVRs 
kompatibel.
Jetzt habe ich aber Funktionen die je nach AVR (mit 16 bzw 8bit 
Stackpointer) unterschiedlich sind. Wie mache ich das, dass der Linker 
automatisch die richtige Version für den verwendeten AVR linked ?
Moderator Persönliche Seite #509809
Lesenswert?
• ▲
▼
Geht nicht.  Du kannst es bestenfalls über verschiedene -L-Optionen
steuern.

Du kannst, auch wenn das nicht wirklich dokumentiert ist, den
Stackpointer jedoch immer als 16-bittig betrachten.  Der GCC tut's
auch so, und falls Atmel wirklich mal einen AVR rausbringen sollte,
der das reservierte SPH-Register nicht mehr ignoriert, ist mehr oder
weniger die Hölle los...
Moderator Persönliche Seite #509878
Lesenswert?
• ▲
▼
Nein, die avr-libc klassifiziert nach den groben Typgruppen (avr2
... avr6). Allerdings ist sie natürlich in der einzigartigen Lage,
dass GCC um die Standardbibliothek weiß und typabhängig wirklich in
unterschiedlichen Verzeichnissen sucht.  Ein derartiger Mechanismus
steht jedoch nicht allgemein für Anwenderbibliotheken zur Verfügung.
Gast #509887
Lesenswert?
• ▲
▼
wenn du z.B. normalerweise nur mit 1MHZ 8MHz 12MHz und 16MHz und 5 
verschiedenen Typen programmierst, könntest du diese 20 Versionen im 
Vorfeld compilieren und z.B. so benennen name_8000000_mega8.o Im 
Makefile kannste dann F_CPU und MCU verwenden um das richtige file zu 
linken.
OP #510020
Lesenswert?
• ▲
▼
Beispiel:
Ich erzeuge die Bibliotheken libintmath.a für die verschiedenen AVRs, 
kopiere die Dateien in die AVR3, AVR4, AVR5 und AVR6 Verzeichnisse und 
füge in der Makfile -lintmath hinzu. Funktioniert das dann so wie 
gewünscht, dass der Compiler je nach AVR Typ die Dateien aus den 
Unterschiedlichen Verzeichnissen nimmt ?
Persönliche Seite #517055
Lesenswert?
• ▲
▼
Hänge doch deine Programme an die vorhandene lib an:

erst eine Sicherung der original-Libs machen

dann etwa so etwas ausführen:

avr-gcc myprog.c -c $(HEAD) -g -mmcu=atmeg32 -Wall -Os -DAVR $(DEFS) $< 
-o myprog.o
avr-ar rc c:/winavr/lib/gcc/avr/4.1.1/avr5\libgcc.a myprog.o
avr-ar t c:/winavr/lib/gcc/avr/4.1.1/avr5\libgcc.a
avr-gcc myprog.c -c $(HEAD) -g -mmcu=attinyxx -Wall -Os -DAVR $(DEFS) $< 
-o myprog.o
avr-ar rc c:/winavr/lib/gcc/avr/4.1.1/avr4\libgcc.a myprog.o
avr-ar t c:/winavr/lib/gcc/avr/4.1.1/avr4\libgcc.a

Jetzt fehlt nach eine Tabelle avr-step-no (avr3 avr4 avr5) zu 
Processortyp

(Hab ich nicht ausprobiert - soll ein Tip sein)

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.