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
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.
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
@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.
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
Nochmal: Eine .hex Datei ist keine Binärdatei sondern eine Textdatei in der jeder Hexchar als ASCI steht. http://de.wikipedia.org/wiki/Intel_HEX
Martin Wende schrieb: > Das echo lässt sich ins makefile basteln? Generell ja, kommt aber darauf an, um was für ein Makefile es eigentlich geht. AVR-Studio dazu zu bringen, es in das automatisch generierte Makefile zu schreiben, dürfte z.B. kaum möglich sein.
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.
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?
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.