*.exe über make ausführen

Gast #1083378
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?
Gast #1083382
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.
Gast #1083449
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.
Gast #1083453
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.
Gast #1083470
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren