www.mikrocontroller.net

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


Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Auweia (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Tobi (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oder noch besser:

kann man eine hexdatei nicht gleioch "mitreinlinken" lassen?

Autor: Auweia (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
# Create final output files (.hex, .eep) from ELF output file.
%.hex: %.elf
  @echo
  @echo $(MSG_FLASH) $@
  $(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.

Autor: Auweia (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Auweia (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
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.

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Auweia (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Martin Thomas (mthomas) (Moderator) Benutzerseite
Datum:

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

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

@ Auweia:

kann ich dir nicht beantworten, habs mir einfach so in den Kopf gesetzt 
:-)

@ martin:

Nein! Werd ich aber mal!

Gruß Tobi

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.