www.mikrocontroller.net

Forum: Codesammlung [AVR ASM] Huffman (de)kompression

Autor: Läubi .. (laeubi) (Moderator) Benutzerseite
Datum:
Angehängte Dateien:

Ein dekompressions Algorithmus für Daten, benuzt wird ein Huffmanbaum.
Nützlich z.B. für die komprimierung von statischen Bildern bei
Grafikdisplays. (bis zu 70% Kompression je nach Eingangsdaten)

Die Funktion benötigt im Y-Pointer einen Zeiger auf den SRAM wohin die
Daten entpackt werden sollen, und im Z-Pointer auf den Flash wo die
komprimierten Daten liegen.
Dies kann aber durch #defines angepaßt werden, sodass theoretisch gleich
auf das DisplayRam geschrieben wird, oder aus dem EEProm/externem
Speicher gelesen wird.
Beispiel:
.include "m32def.inc"

.dseg
  buffer:
  .org 0x60
  .byte 12
.cseg

//Feldpointer initialisieren für Huffman
ldi YL, LOW(buffer)
ldi YH, HIGH(buffer)
//Datenpointer initialisieren
ldi ZL, LOW(daten*2)
ldi ZH, HIGH(daten*2)
call huffman
call <FlushSRAM2Display>

loop:
rjmp loop
.include "Huffman.asm"
daten:
.include "daten.txt"

Einstellmöglichkeiten: (jeweil über #defines)
- Von wo gelesen werden soll
- Wohin soll geschriben werden
- Sollen die verwendeten Register gerettet werden
- soll der 4bit Modus unterstüzt werden

Komprimiert werden können Daten mittels des Javaprogramms im Anhang
(nächstes Posting), gelesen werden Binärdaten (Ich erzeuge die mit
meinem GrafikKonverter bspw: Beitrag "Grafikkonverter Tool für AVR/Mikrocontroller (BMP2C, BMP2ASM, BMP2BASCOM)"
), geschrieben wird eine TXT Datei im AVR Studio ASM Format die einfach
per include eingebunden werden kann.

Wenn Interese besteht kann ich natürlich noch ne kleine Doku zum
Dateiformat veröffentlichen, z.B. wenn jemand Lust hat einen
(kompatiblen) dekompressor in C oder Basic zu verfassen.

Zur Geschwindigkeit:
bei 16MHZ dauert es eine 240x64 Pixel Grafik zu dekodieren mit 24%
kompressionsrate im 8bit Modus etwa 15ms
bei 4bit (30% gleiche Datei) etwa 19,5ms
Autor: Läubi .. (laeubi) (Moderator) Benutzerseite
Datum:
Angehängte Dateien:

Wenn Java installiert ist kann das JAR File meist per Doppelklick direkt
ausgeführ werden, oder aus der Konsole heraus mittels:
java -jar Huffman_Kompressor_V1.jar
Zusätzlich kann der 4-BitModu mittels:
java -jar Huffman_Kompressor_V1.jar 4
gewählt werden, dies bringt manchmal höhhere Kompressionsraten durch den
kleineren Huffmanbaum der entsteht.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel




Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder GIF-Format hochladen.
Siehe Bildformate
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net