Hexfile mit make manipulieren

OP (Firma: fritzler-avr.de) #2598613
Moinsen,
hab zu dem Thema nichts weiter gefunden.
Nachdem ich per Winavr das Programm für den AVR compiliert habe, soll 
der Compiler noch eine Zeile anhängen mit zB !FWT-0.4b-1.0.

Meine Projekte mit USB bekommen nen Bootloader zum gemütlichn 
Firmwareupdate. Damit man jetzt nicht ausversehen die falsche hex 
draufschiebt, sucht das PC Programm erst nach dieser Zeile um zu prüfen 
ob Hardwareversion und Projekt Übereinstimmen.

Daher suche ich nach ner möglichkeit, dass der Compiler das am Ende noch 
in die Hexdatei schiebt, gibts da irgendwelche Anweisungen für das 
makefile oder sonstewo?
Natürlich kann ichs auch immer manuell einfügen, aber irgendwann 
vergisst mans mal und Firmwareupdaten geht nicht beim Bekannten, der das 
Gerät nutzt.

BRäuchte das für dieses Gerät: http://www.fritzler-avr.de/HP/fwt.php
Gast
Warum denn erst ins Hex-File einfügen??

Ich mache das so:
Eine Konstante (String) definieren und zwar im Source-Code selber.
Geht in C und ASM. Der Sourcecode wird geändert, dann kann ich auch
den String mit Datum, Versionsnummer etc noch verändern, dann
steht es auch dort wo es meiner Meinung nach hingehört.

Compilieren, linken etc. und schon steht der String auch im Hex-File.

Beim direkten Suchen im HEX_File ggf. darauf achten daß z.B. eine "0" 
aus
zwei Byte bestehen kann. nämich "3" und "0", weil 0x30 die 
Hex-Darstellung
ist.
Gast
Hi

>Beim direkten Suchen im HEX_File ggf. darauf achten daß z.B. eine "0"
>aus
>zwei Byte bestehen kann. nämich "3" und "0", weil 0x30 die
>Hex-Darstellung ist.

????

0x30 ist der ASCII-Code für '0' und beansprucht nur 1 Byte.

MfG Spess
OP (Firma: fritzler-avr.de)
@spess53
Eben doch ;)
In nem hexfile steht zB 0x30 als ASCI drinne, das belegt die ASCI chars 
3 und 0 , also 2 byte und geparsed ergeben die 2 bytes das byte 0x30 ;)

Das echo lässt sich ins makefile basteln?

Im Sourcecode stehen ja auch Firmwareversion und Hardwareversion, ist 
nur bissel anstrengend das rauszufiltern, man weis ja niw wos steht.
Gast
Hi

>In nem hexfile steht zB 0x30 als ASCI drinne, das belegt die ASCI chars
>3 und 0 , also 2 byte und geparsed ergeben die 2 bytes das byte 0x30 ;)

Das Auseinanderdröseln brauchst du nur, wenn du ein Zeichen in 
Hexadezimal darstellen willst. Beim Parsen wird das Zeichen (1 Byte) 
komplett behandelt.

MfG Spess
OP (Firma: fritzler-avr.de)
Ich nutze ja winavr und dort das Makefile ausm Tool mfile.
Ist also frei editierbar.

so eben mal gemacht:
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 .fuse -R .lock $< $@
6
  echo "!FWT-0.4b-1.0" >> $(TARGET).hex

dabei kommt raus:
1
blabla
2
:10318C000000000000000000000000000000000033
3
:10319C000000000000000000000000000000000023
4
:1031AC000000000000000000000000000000000013
5
:0831BC0000000000000000000B
6
:00000001FF
7
!FWT-0.4b-1.0

Vielen Dank!

bastel ich jetz nochn
1
echo $(FWVERS) >> $(TARGET).hex
draus und nehms als mein neues beispielmakefile ;)
Ich an deiner Stelle würde das aber nicht dort "hart-codieren".

Schreibe weiter oben im Makefile so was:
1
HW_VERSION = 1.0
2
SW_VERSION = 0.4b
und dann
1
echo !FWT-$(SW_VERSION)-$(HW_VERSION) >> $@

Dann kannst du das auch gleich als Define in den Code weiterreichen, und 
musst es so nur an einer Stelle pflegen.

EDIT: Sehe gerade, du bist auch selber auf Ähnliches gekommen.
OP (Firma: fritzler-avr.de)
Hab da jetz nur was gefunden wie man eine makefile Variable im C Code 
nutzen kann aber nicht andersrum.

http://stackoverflow.com/questions/7900661/how-to-read-a-cmake-variable-in-c-source-code
Das bespiel versteh ich jetzt auch grade nicht so wirklich.

Hat natürlich vorteile sich die Variablen gleich ausm C Code zu saugen, 
vor allem da dies schon im C Code vorkommt (wird aufm Display angezeigt)
Martin Wende schrieb:
> Das bespiel versteh ich jetzt auch grade nicht so wirklich.
>
> Hat natürlich vorteile sich die Variablen gleich ausm C Code zu saugen,
> vor allem da dies schon im C Code vorkommt (wird aufm Display angezeigt)

Warum gehst du nicht einfach den umgekehrten (und viel einfacheren Weg) 
und übernimmst im C-Code die Angaben aus dem Makefile?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.