Komprimieren von 1024 Byte binärer Daten ins RAM

Gast #1126856
Lesenswert?
• ▲
▼
Hallo,

ich habe vor in einen ATMega168 1024Byte binärer Daten über die serielle 
Schnittstelle zu lesen und im Ram abzulegen um sie später wieder 
auszugeben. Leider besitzt der Mega168 nur 1K Ram und ich bin daran 
gebunden. Gibt es eine Möglichkeit dies Daten zu komprimieren?

Gibt es irgendwo vielleicht einen paar Codezeile dazu.

Gruß Armin
#1126868
Lesenswert?
• ▲
▼
was sind das denn für Daten? umso höher die Gleichverteilung der 
einzelnen Zeichen ist, umso weniger kannst du codieren...

Text lässt sich für gewöhnlich wesentlich besser komprimieren als 
Programme o.Ä. fertigen Code für AVRs kenne ich nicht, aber die 
Verfahren von Zip u.Ä. sollten dir helfen.

Christian
#1126871
Lesenswert?
• ▲
▼
Wie man komprimieren kann und wie, hängt von den Daten selbst ab. Was 
man schon über sie weiß, muss man nicht noch zusätzlich speichern.

Ein Beispiel: Nehmen wir an, bei jedem Byte sind die obersten vier Bits 
immer null. Dann muss man diese Information nicht speichern, sondern 
kann immer zwei Bytes jeweils Nibble-weise in einem abspeichern. Handelt 
es sich nur um Ziffern und Buchstaben, könnten 6 Bits statt 8 
ausreichen, das würde man aber anders programmieren als die vier Bit. 
usw.
#1126872
Lesenswert?
• ▲
▼
Armin wrote:

> ich habe vor in einen ATMega168 1024Byte binärer Daten

Textdaten könnte man komprimieren, Binärdaten kaum.


> Leider besitzt der Mega168 nur 1K Ram und ich bin daran
> gebunden.

Warum darfst Du keinen ATmega328P nehmen?


> Gibt es irgendwo vielleicht einen paar Codezeile dazu.

Ein paar Zeilen reichen nicht, Komprimieren kostet kBytes an Flash.


Peter
Gast #1126902
Lesenswert?
• ▲
▼
Wenn's eine Strichzeichnung ist, laesst es sich mit ein paar Byte code 
per RLE problemlos komprimieren. Das hat mit Text oder Binaer nun 
wirklich nichts zu tun... wie Christian oben voellig richtig schrieb, 
ist es eine Frage der Gleichverteilung.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren