www.mikrocontroller.net

Forum: Compiler & IDEs Linker option übergeben


Autor: Max (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich habe da mal eine Frage. Ich verschiebe meine .text section meines 
Bootloaderprogramms auf die Speicherstelle 0xFC00 mit der 
Linkeranweisung:

-Wl,--section-start=.text=0xFC00

das funktioniert auch wunderbar. Nun wollte ich wissen ob es möglich ist 
den Bereich in den verschoben werden soll in einem Headerfile vom Nutzer 
festlegen zu lassen, damit der Bootloader auch für andere AVRs benutzt 
werden kann und mann nicht immer extra das Makefile ändern muss. Also 
etwas in die Richtung:

-Wl,--section-start=.text=&(BOOTSTART)

Meine Versuche ergeben aber immer den Compilerfehler:

C:\programme\WinAVR\bin\..\lib\gcc\avr\3.4.5\..\..\..\..\avr\bin\ld.exe: 
missing argument(s) to option "--section-start"
make: *** [TRUL.elf] Error 1

Ist das überhaupt möglich oder muss ich das Makefile für jeden 
Controller extra gestalten?

Bin neu in dem Makefile ändern :-) also lasst Gnade walten und erklärt 
lieber bißl mehr :-p

Viele Grüße

Max

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

Bewertung
0 lesenswert
nicht lesenswert
Ein Headerfile geht nicht, irgendwie muss der Wert auf der Compiler-
bzw. Linkerkommandozeile feststehen.  Das impliziert, dass make ihn
ermittelt.  GNU make kann aber bspw. auch Variablen mit dem Ergebnis
externer Kommandos belegen.  Du könntest damit zum Beispiel eine
Datei haben, nennen wir sie mal mcutype.txt:
atmega64 0xfc00
atmega16 0x3c00

Im Makefile weist du dann eine Variable zu
MCUFILE=mcutype.txt
BOOTSTART=$(shell sed -ne /$(MCU)/'s/^.*  *//p' $(MCUFILE))

Danach kannst du $(BOOTSTART) als Wert für das --section-start
benutzen.  Ein alternatives Kommando, das den gleichen Effekt
hat, wäre:
BOOTSTART=$(shell gawk /$(MCU)/'{print $2}' $(MCUFILE))

Ist aber nicht so portabel, weil der awk nur bei Linux und MinGW
gawk heißt, während andere Systeme ihn einfach nur awk nennen.
Der sed heißt überall sed. :)

Autor: Compy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> -Wl,--section-start=.text=&(BOOTSTART)

Pass da mal mit auf, nich dass dir die Konsole was wegschnippelt. Unter
*nix-Systemem sind & und () Metazeichen, die man wegstellen muss:

-Wl,--section-start=".text=&(BOOTSTART)"

Z.B. mit den Anführungszeichen. Was die Windows-Pseudo-Konsole genau 
macht, weiß ich net, aber nen Versuch isses wert.

Autor: Max (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Hilfe die Idee von Compy hat leider nicht funktioniert. 
Also werde ich mal versuchen die Textfiles zu erstellen :-)

Autor: Frank Lorenzen (florenzen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jörg Wunsch wrote:

[...]
> Ist aber nicht so portabel, weil der awk nur bei Linux und MinGW
> gawk heißt, während andere Systeme ihn einfach nur awk nennen.
> Der sed heißt überall sed. :)

Fast. Du bekommst nur nicht überall den gleichen :)
sed macht gegenüber awk, find, make und Konsorten auch keine Ausnahme:
% gsed --version | head -1
GNU sed version 4.1.5

Und nein, ich versichere Dir ich habe es nicht umbenannt.
Im Übrigen wundere ich mich ein wenig über deine Aussage daß der awk 
unter Linux bzw. MinGW (Das ist bezogen auf das Userland faktisch das 
Gleiche, GNU/Linux nutzt GNU als Userland, daher der Name, und MinGW ist 
die Portierung dieser Tools auf Windows) gawk heißt. Eigentlich haben 
die GNU-Tools nur in nicht GNU Umgebungen den "g"-Präfix, schlicht und 
einfach um sie von den nativen Tools unterscheiden zu können, es wäre 
halt blöde hätte man zwei "awk", eins in /usr/bin und eins in 
beispielsweise /usr/gnu/bin.
Aber GNU-Umgebungen mit g-Präfix... Man lernt ja nie aus.

So genug Haare zerteilt für heute :)


gruss
f

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

Bewertung
0 lesenswert
nicht lesenswert
Ist aber so, das MinGW von WinAVR bringt eben nur einen gawk mit,
aber keinen awk. :-(  Einen sed bringen sie aber von Haus aus mit
(auch wenn das ein GNU sed ist).

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.