AVR-Huffman: Unterschied zwischen den Versionen

Aus LaborWiki
Wechseln zu: Navigation, Suche
Keine Bearbeitungszusammenfassung
Zeile 18: Zeile 18:
* Tool zum dekomprimieren der von huffman-encode erzeugten Daten (huffman-decode; Host; geschrieben in portablen C)
* Tool zum dekomprimieren der von huffman-encode erzeugten Daten (huffman-decode; Host; geschrieben in portablen C)
* Implementierung der Dekompression für AVR-Microcontroller (geschrieben in C)
* Implementierung der Dekompression für AVR-Microcontroller (geschrieben in C)
==API==
typedef ... huffman_dec_ctx_t;
void huffman_dec_init(huffman_dec_ctx_t* ctx, uint16_t(*rb_func)(uint16_t));
void huffman_dec_set_addr(huffman_dec_ctx_t* ctx,uint16_t addr);
uint16_t huffman_dec_byte(huffman_dec_ctx_t* ctx);
===huffman_dec_ctx_t===
Der Kontext-Typ definiert die Speicherstruktur für die Daten einer Huffman-Dekompressionsinstanz. D.h. eine Variable von diesem Typ kann die Informationen Speichern die für die Dekompression benötigt werden (u.a. den Baum, bit buffer zum lesen der Daten, funktion zum Lesen der Daten).
===huffman_dec_init===
Diese Funktion initialsiert eine Variable vom Typ huffman_dec_ctx_t zu der ein Pointer übergeben wird. Das zweite Argument ist ein Pointer auf eine Funktion welche aufgerufen wird wenn komprimierte Daten gelesen werden sollen.
===huffman_dec_set_addr===
Diese Funktion setzt die Adresse welche der Lese-Funktion übergeben wird und nach dem Aufruf der Lese-Funktion automatisch um eins inkrementiert wird.
===huffman_dec_byte===
Diese Funktion initialisiert beim ersten Aufruf mit einem neuen Kontext den Huffman-Baum und gibt das nächste dekomprimierte Byte zurück.
Dies Funktion ruft bei Bedarf die Lese-Funktion auf weitere komprimierte Daten zu lesen.
===Lese-Funktion===
Ein Pointer auf diese Funktion wird der Initialisierungsfunktion übergeben. Die Funktion soll die Komprimierten Daten Lesen und bei jedem Aufruf entweder ein Byte aus dem komprimierten Datenstrom zurückgeben oder EOF(0xFFFF).
Durch die Verwendung eines Funktionszeigers ermöglicht es Huffman komprimierte Date auf verschiedenen Medien zu speichern. So kann z.B. ein Kontext Daten aus dem Flash entpacken und ein anderer Daten aus dem EEPROM.
==Konzept==

Version vom 2. Juli 2009, 23:28 Uhr

         
AVR-Huffman

Release status: stable [box doku]

Description Dekompression von Huffman komprimierten Daten zur Laufzeit
Author(s)  Daniel (Bg)
Last Version  0.1.0 ()
Platform  AVR
License  GPLv3+
Download  svn: [1]




About

AVR-Huffman ist eine Implementierung der Huffman-Kompression bestehend aus 3 Teilen

  • Tool zum komprimieren binärer Daten (huffman-encode; Host; geschrieben in portablen C)
  • Tool zum dekomprimieren der von huffman-encode erzeugten Daten (huffman-decode; Host; geschrieben in portablen C)
  • Implementierung der Dekompression für AVR-Microcontroller (geschrieben in C)

API

typedef ... huffman_dec_ctx_t;
void huffman_dec_init(huffman_dec_ctx_t* ctx, uint16_t(*rb_func)(uint16_t));
void huffman_dec_set_addr(huffman_dec_ctx_t* ctx,uint16_t addr);
uint16_t huffman_dec_byte(huffman_dec_ctx_t* ctx);

huffman_dec_ctx_t

Der Kontext-Typ definiert die Speicherstruktur für die Daten einer Huffman-Dekompressionsinstanz. D.h. eine Variable von diesem Typ kann die Informationen Speichern die für die Dekompression benötigt werden (u.a. den Baum, bit buffer zum lesen der Daten, funktion zum Lesen der Daten).

huffman_dec_init

Diese Funktion initialsiert eine Variable vom Typ huffman_dec_ctx_t zu der ein Pointer übergeben wird. Das zweite Argument ist ein Pointer auf eine Funktion welche aufgerufen wird wenn komprimierte Daten gelesen werden sollen.

huffman_dec_set_addr

Diese Funktion setzt die Adresse welche der Lese-Funktion übergeben wird und nach dem Aufruf der Lese-Funktion automatisch um eins inkrementiert wird.

huffman_dec_byte

Diese Funktion initialisiert beim ersten Aufruf mit einem neuen Kontext den Huffman-Baum und gibt das nächste dekomprimierte Byte zurück. Dies Funktion ruft bei Bedarf die Lese-Funktion auf weitere komprimierte Daten zu lesen.

Lese-Funktion

Ein Pointer auf diese Funktion wird der Initialisierungsfunktion übergeben. Die Funktion soll die Komprimierten Daten Lesen und bei jedem Aufruf entweder ein Byte aus dem komprimierten Datenstrom zurückgeben oder EOF(0xFFFF). Durch die Verwendung eines Funktionszeigers ermöglicht es Huffman komprimierte Date auf verschiedenen Medien zu speichern. So kann z.B. ein Kontext Daten aus dem Flash entpacken und ein anderer Daten aus dem EEPROM.

Konzept