pC/LZFG
Ein oft auftretendes Problem bei embedded-devices, die über DFÜ-Wege updatebar sein sollen, ist die Übertragungsdauer für eine neue Firmware. Die Lösung kann das Packen der Daten sein. Doch welcher Algorithmus erreicht eine gute Packrate ohne das der Entpacker im Gerät einen nicht zur Verfügung stehenden Bedarf an Code und RAM aufweist?
Um Tests werden Sie sicherlich nicht herum kommen, der hier vorgestellte LZFG-Algorithmus ist aber auf jeden Fall eine gute Wahl. Die meisten Entpacker benötigen reichlich (bis zu 256kB) RAM um z.B. über die Huffman-Table die Daten wieder zu entpacken oder die Packrate erreicht nicht einmal 20%.
Das LZFG-Decompressor Modul benötigt gerade einmal 4kB RAM, die in Laufzeit dynamisch allokiert werden. Desweiteren ist der Code sehr kompakt und der Packer erreicht erstaunliche 40..55% beim Packen einer Applikation. Als Übergabeparameter benötigt der hier vorgestellte Decompressor die Adresse des gepackten Datensatzes, die Länge dieses Datensatzes sowie zwei Zeiger für Adresse entpackter Datensatz (wird intern dynamisch allokiert) und Länge des Selben. Innerhalb des Modules wird geprüft, ob es sich um einen kompatiblen LZFG-Datensatz handelt und ob die Länge und die CRC16 der entpackten Daten identisch den im LZFG-Datensatz hinterlegten Werten sind.
Derzeit kann jedoch nur eine einzelne Datei in diesem Verfahren mit den nachfolgenden Werkzeugen ge- und entpackt werden. Eine spätere Erweiterung ist jedoch ohne Probleme möglich.
download pC/LZFG 1.20a (as ZIP)
Releases:
1.00a | erste alpa-Release |
1.02b | Implementation von CRC und Länge in das gepackte Format. Bugfix im Kompressor für die letzten Bytes der Datei. |
1.10a | Komplettes Update zu U08..U32 Typen. Bessere Portabilität für RTOS-lose Verwendung implementiert. |
1.10b | Bugfix in Initialisierung einer Variablen |
1.20a | Redesign bei Länge und CRC im cop-File (fix big-endian) - neue Signatur (auch in COP), da nun inkompatibel zu Vorversionen |
Dienste des pC/LZFG Version 1.20a (Kurzform)
Die hier aufgeführte Funktionsübersicht dient einzig als Kurzübersicht.
Für detailierte Informationen sehen Sie bitte in Referenz-Manual zu pC/LZFG nach.
LZFG-Decompressor: | |
LZFG_Decomp | Dekomprimiert den Datensatz |
Error-Codes:
Name | Decimal_Value |
LZFG_SUCCESS | 0 |
LZFG_noLZFG | 130 |
LZFG_lenERR | 131 |
LZFG_crcERR | 132 |
LZFG_memERR | 133 |
Um die Daten einzupacken verwenden Sie einfach nachfolgendes Programm COP.EXE das auch als PC-Entpacker dient. Für alle Interessierten habe ich natürlich auch hierzu den Code zum Download bereitgestellt.
Und hier natürlich noch der Source-Code dazu: