Forum: Compiler & IDEs *.exe über make ausführen


von Tobi (Gast)


Lesenswert?

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?

von Auweia (Gast)


Lesenswert?

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.

von Tobi (Gast)


Angehängte Dateien:

Lesenswert?

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

von Tobi (Gast)


Lesenswert?

Oder noch besser:

kann man eine hexdatei nicht gleioch "mitreinlinken" lassen?

von Auweia (Gast)


Lesenswert?

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.

von Auweia (Gast)


Lesenswert?

>Es wäre nützlihc wenn Dein Programm
>akzeptiert, wenn seine Ausgabedatei identisch mit einer der
>Eingabedateien ist.
Andernfalls die Datei vorher noch umbenennen.

von Tobi (Gast)


Lesenswert?

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.

von Auweia (Gast)


Lesenswert?

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.

von Tobi (Gast)


Lesenswert?

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.

von Auweia (Gast)


Lesenswert?

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

von Martin T. (mthomas) (Moderator) Benutzerseite


Lesenswert?

avr-libc FAQ "How to add a raw binary image to linker output?" schon 
gelesen?

von Tobi (Gast)


Lesenswert?

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