Support für Hersteller
Userkonfiguration
Beispielcode
Analysewerkzeuge
Support für BiDiB
Erzeugen von Hex-Datei für Firmware-Update
Üblicherweise werden Projekte aus Quelldateien übersetzt, die übersetzten Dateien (sog. Object-Dateien) werden miteinander verbunden ('gelinkt') und daraus wird dann die Binärdatei für die Zielbaugruppe gewonnen. Die Darstellung der Daten erfolgt in BiDiB als Intel-Hex-Datei, dann kann diese Binärdatei einfach mit dem standardisiertem Firmware-Update-Verfahren in den Baustein eingespielt werden.
In der Regel erfolgt dieser Vorgang (oft auch 'Build' genannt) automatisiert mit Hilfe eines Programmes ('make
'),
welches die gegenseitigen Abhängigkeiten der Quelldateien prüft und alle notwendigen Aufrufe durchführt.
Der Ergebnis eines solchen Prozesses ist typischerweise eine Datei mit folgendem Namen: mein_projekt.hex.
Dateinamen für BiDiB
Dateinamen für BiDiB sollen wie folgt aufgebaut sein:
<project>_<version>.000.hex
wobei project für den Namen der Firmware steht und version den Änderungsindex angibt und i. d. R. aus drei Zahlen besteht. 000 bezeichnet dann den Zielspeicherbereich. D.h. man muss das normale Ergebnis des build-Vorganges passend umbenennen.
Automatisches Erzeugen mit make
Dieses Beispiel zeigt exemplarisch, wie man sich diese Dateinamenskonvention mit make generieren kann. Im Beispiel
wird gawk
und cp
benutzt, welches bei den
utils des gcc enthalten ist.
- 1. Anlegen einer Versionsdatei im Quellcode (
version.h
): -
#define MAIN_VERSION 0 #define SUB_VERSION 13 #define COMPILE_RUN 01
Diese Datei wird vom Quellcode gelesen und die darin verwendeten defines werden für die Versionsabfrage in BiDiB verwendet.
- 2. Auslesen von
version.h
mitmake
: -
Im
makefile
legt man sich eine Variable MYVERSION an, diese füllt man mittels eines Shell-Befehls aus derversion.h
. Hierzu durchsucht man mittelsgawk
diese Datei nach den Schlüsselwörtern und holt sich den dritten Parameter in der Zeile:MYVERSION := $(shell gawk '/MAIN_VERSION/ {printf $$3 "."} /SUB_VERSION/ {printf $$3 "."} /COMPILE_RUN/ {printf $$3}' ../version.h )
Man beachte, dass man das $-Zeichen für Parameter zweimal schreiben muss, einmal fällt es bei der Substitution von
make
raus. MYVERSION enthält nun die Zeichenkette:0.13.01
- 3. Erzeugen der Hexdatei:
-
Hier benutzt man die Variable und fügt im makefile einen Copy-Befehl hinzu, welcher die Ausgabedateien umkopiert:
%.hex: $(TARGET) avr-objcopy -O ihex $(HEX_FLASH_FLAGS) $< $@ cp $(PROJECT).hex $(PROJECT)_$(MYVERSION).000.hex %.eep: $(TARGET) -avr-objcopy $(HEX_EEPROM_FLAGS) -O ihex $< $@ || exit 0 cp $(PROJECT).eep $(PROJECT)_$(MYVERSION).001.hex
Und man erhält:
mein_projekt_0.13.01.000.hex
undmein_projekt_0.13.01.001.hex
.