Forum: Compiler & IDEs Komprimieren von 1024 Byte binärer Daten ins RAM


von Armin (Gast)


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

von Christian A. (cau) Flattr this


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

von Detlev T. (detlevt)


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.

von Peter D. (peda)


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

von P. S. (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.