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.




pCLZFG_120a.zip
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:



COP.zip
download COP.exe (as ZIP)

COP_src.zip
download COP_source (as ZIP)