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
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. :)
> -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.
Danke für die Hilfe die Idee von Compy hat leider nicht funktioniert. Also werde ich mal versuchen die Textfiles zu erstellen :-)
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.