Forum: Compiler & IDEs Linker option übergeben


von Max (Gast)


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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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:
1
atmega64 0xfc00
2
atmega16 0x3c00

Im Makefile weist du dann eine Variable zu
1
MCUFILE=mcutype.txt
2
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:
1
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. :)

von Compy (Gast)


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.

von Max (Gast)


Lesenswert?

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

von Frank L. (florenzen)


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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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).

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
Noch kein Account? Hier anmelden.