Hi Zusammen! Ich will über das makefile ein Programm (Windows Rechner, also eine *.exe) starten. Ziel soll sein, eine mit dem AVR-GCC erzeugte *.hex Datei mit einer anderen *.hex Datei zu mergen. Also sollen zwei Hexfiles zu einem Hexfile zusammengefügt werden (natürlich so, dass die zwei Datein sich adressmäßig nicht überlappen). Dazu habe ich mir ein Windows Programm geschrieben, dass das mergen erledigt. Ich hätte aber gerne, dass das Programm automatisch nach dem kompilieren aufgerufen wird. Wie stelle ich das an beim WinAVR? Kann ich das dem makefile nicht irgendwie sagen?
Ganz normal. 1. Ein Target angeben 2. Als Aktion Dein Programm aufrufen Wie die Syntax genau geht müsste in der Dokumentation zu make stehen. Schau Dir doch mal das bestehende Makefile an. Da müsstest Du das relativ schnelle heraushaben.
Hi! Super schnelle Antwort! Mein makefile habe ich mir angesehen, aber da werde ich nicht schlau draus. Die Doku finde ich nicht. Wo steht die denn? Ich habe wie gesagt WinAVR installiert! Gruß Tobi
Oder noch besser: kann man eine hexdatei nicht gleioch "mitreinlinken" lassen?
Make doku steht unter: http://www.gnu.org/software/make/manual/make.pdf Linken wird nicht gehen, denn es handelt sich ja nicht um ein Object-File sondern ein Hex-File. In Deinem Makefile siehst Du einen Abschnitt
1 | # Create final output files (.hex, .eep) from ELF output file. |
2 | %.hex: %.elf |
3 | @echo |
4 | @echo $(MSG_FLASH) $@ |
5 | $(OBJCOPY) -O $(FORMAT) -R .eeprom -R .Interface -R .Bootsektorram $< $@ |
Wie die Überschrift schon sagt, wird hier das hex file erzeugt. Ich vermute, das Du nach der Zeile beginnend mit: "$(OBJCOPY)" Dein Programm aufrufen solltest. Es wäre nützlihc wenn Dein Programm akzeptiert, wenn seine Ausgabedatei identisch mit einer der Eingabedateien ist. Die oberste Zeile enthält die Angabe über das Target "%.hex" und die Abhängigen files "%.elf". Ich würde aber nicht Hex als abhägngig einfügen. Evtl. kann es etwas hakelig werden, wenn Target und dependant files vom gleichen Typ sind. Musst Du probieren. Es kommt darauf an wie und wozu und wann Du das andere Hex-File erzeugst. Vielleicht gibst Du uns ein paar Infos darüber.
>Es wäre nützlihc wenn Dein Programm >akzeptiert, wenn seine Ausgabedatei identisch mit einer der >Eingabedateien ist. Andernfalls die Datei vorher noch umbenennen.
Hi! Danke! Ich will das Hexfile auf einen anderen Controller programmieren. Bisher lade ich die Daten mit einem Bootloader (der auf dem Master Controller läuft) in den Master Controller, der dann damit den Slave programmieren kann. Besser wäre es aber, wenn die Daten gleich mit dem Kompiliervorgang quasi als "hexbuffer" im Master-Controller landet. So spart man sich den extra Ladevorgang.
Achso. D.h. also Du hast ein Programm in Hex-Form das vom einem Mastercontroller in eine Sklavencontroller geladen werden soll. Das Hex-File des Masters soll das Hex-File das Sklaven enthalten. OK. Dann geht der oben beschriebene Weg. Du musst nur noch die Adresse des sekundären Hex-Files festlegen. Es gibt allerdings noch einen zweiten Weg. Du machst aus dem Hex-File eine Initialisierung eines char Arrays. A la:
1 | char SlavePgm = { 0x89, 0x98, blablabla }; |
Das kompilierst Du dann ganz normal in den Master-Code. Für die Umwandlung gibt es fertige Programme. Eine Änderung des makefiles wird dann unnötig. Du musst nur das C-File mit der Initialisierung in das Projekt mit aufnehmen.
Genau das will ich machen! Das mit dem Array hab ich mir auch schon überlegt, finde ich aber unschön. Mir ist der andere Weg lieber. Danke für die Hilfe, ich werds mal so probieren.
>Das mit dem Array hab ich mir auch schon überlegt, finde ich aber >unschön. Nur interessehalber würde ich gerne mal wissen, was Du daran unschön findest.
avr-libc FAQ "How to add a raw binary image to linker output?" schon gelesen?
Hi! @ Auweia: kann ich dir nicht beantworten, habs mir einfach so in den Kopf gesetzt :-) @ martin: Nein! Werd ich aber mal! Gruß Tobi
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.