|
|
Binäre Daten zum Programm hinzufügenWill man beliebige Daten einem Programm hinzufügen (z.B. Bitmaps, Fonts, Seriennummern, ...) gibt es dafür mehrere Möglichkeiten. [Bearbeiten] Einfügen als C-ArrayDie Daten werden mit einem Hilfsprogramm in ein C-Array umgewandelt und dann einfach einkompiliert. Zum Umwandeln von Binärdaten in ein C-Array gibt es bereits einige fertige Lösungen. So kann z.B. der kostenlose Hexeditor HxD eine Datei als C-Array exportieren. Mit Hilfe des Kommandozeilentools srec_cat ist dies ebenfalls möglich. $ srec_cat my_data.bin -binary -output my_c_file.c -c-Array my_var_name -include Es wird dann eine C-Datei erzeugt die ein Array my_var_name und einige Hilfsvariablen dazu enthält. Diese Datei wird dann einfach ins Projekt eingebunden und ganz normal verwendet. Beim avr-gcc ist noch darauf zu achten das die Daten, falls gewünscht, im Programmspeicher und nicht im SRAM landen. Siehe AVR-GCC Tutorial
[Bearbeiten] objcopyMit objcopy wird aus der Binärdatei eine Objektdatei erstellt die zum Projekt gelinkt werden kann. Hier ein Beispiel wie das für den AVR gemacht wird. $ avr-objcopy -I binary ~/my_data.bin --binary-architecture avr4 -O elf32-avr my_data.o $ avr-nm -t my_data.o 000008c6 D _binary__home_mat_my_data_bin_end 000008c6 A _binary__home_mat_my_data_bin_size 00000000 D _binary__home_mat_my_data_bin_start Die Objektdatei enthält dann drei Symbole deren Namen allerdings etwas unhandlich sind und, je nach Aufruf von objcopy auch noch den kompletten Pfad der Binärdatei enthalten. Es ist allerdings möglich mit einem weiteren Aufruf von objcopy den Symbolen brauchbarere Namen zu verpassen. Dieses Datenpaket kann dann in C verwendet werden wenn man folgende Zeile einfügt:
Beim Linken des Projekts wird die Objekdatei dann einfach mit zum Projekt gelinkt.
[Bearbeiten] srec_catWenn die Ausgabedatei des Compilers eine HEX-Datei ist (typisch bei µC Anwendungen) dann kann die Binärdatei mit Hilfe von srec_cat in die original Datei eingefügt werden. Bei dieser Methode kann dann allerdings nicht mehr über einen symbolischen Namen auf die Daten zugegriffen werden sondern es muss mit festen Adressen gearbeitet werden. Beispiel für eine Datei die in die finale Intel-HEX-Datei beim Offset 0xF000 eingefügt wird. srec_cat myprog.hex -intel my_data.bin -binary -offset 0xF000 -output my_output.hex -intel -address-length=2 In C kann dann mittels eines Pointers bzw. beim AVR mitteles den PROGMEM Funktionen auf diese Daten zugegriffen werden.
|