Forum: Mikrocontroller und Digitale Elektronik Datei Dekomprimierung


von Dave (Gast)


Lesenswert?

Hallo..

wir evaluieren gerade eine Funktion für ein bestehendes Projekt. Es geht 
dabei darum, eine komprimierte (Format können wir festlegen) Datei in 
einem 32bit µC (Renesas RX71M 240MHz 512kB RAM, 4MB Flash + externe SD 
Karte) zu entpacken. Quelle und Ziel ist jeweils die SD Karte (wird 
mittels SPI nicht SDHI angesprochen). RAM ist intern noch genügend 
vorhanden > 300kB, RTOS nützen wir nicht.

Hat damit schon jemand Erfahrung, die Beiträge die man so liest sind 
entweder schon älter oder zwiegespalten. An sich würde uns GZIP im 
Moment am besten gefallen.

Danke
Dave

von Jim M. (turboj)


Lesenswert?

Normalerweise entpackt man die Daten an der Quelle und schiebt die 
Rohdaten direkt oder via µC auf die SD Karte. Das ist in den meisten 
Fällen schneller.

Gleichzeitig Lesen und Schreiben ist bei SD Karten schon ein Problem und 
wird ohne großzügiges Cachen eher lahm. Denn die SD Karte taucht zum 
Schreiben eine Weile ab.

GZIP Dekompression (zlib) müsste man locker in 300KB rein bekommen - 
dann wäre IMHO auch noch Platz für Caches übrig.

von MaWin (Gast)


Lesenswert?

Jim M. schrieb:
> GZIP Dekompression (zlib) müsste man locker in 300KB rein bekommen

Bekommt man locker in 30000 (oft nimmt man allerdings statt 16k gerne 
32k Tabellengrösse plus ein paar hundert byte Programm, kann 
komprimieren und dekomprimieren. So wie ich es verstehe kann er sich ja 
ein Verfahren aussuchen und muss nicht dutzende unterstützen.

von blub (Gast)


Lesenswert?

Da ihr durch SPI limitiert seid könnte es schneller sein,  die Daten 
nicht auf die Karte zurückzuschreiben, sondern jedes Mal während dem 
Laden zu entpacken.

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Da wuerd' ich auch immer mal ein Auge auf's jeweilige Lizenzmodell der 
verwendeten Software werfen, und gucken, ob das zu den eigenen 
Vorstellungen passt.
Um's ausprobieren auf der Ziel-HW werdet ihr wohl nicht rumkommen, um 
die Eignung festzustellen.

Gruss
WK

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Dergute W. schrieb:
> Da wuerd' ich auch immer mal ein Auge auf's jeweilige Lizenzmodell der
> verwendeten Software werfen

Sollte bei der zlib kein Problem sein, das ist 'ne Art BSD-Lizenz.

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Jörg W. schrieb:
> Sollte bei der zlib kein Problem sein, das ist 'ne Art BSD-Lizenz.

Ich sag' ja auch nicht, dass es ein Problem bei der zlib ist. Das im 
Ausgangspost erwaehnte gzip ist aber schon mal GPL. Wie z.b. LZO auch.
Das muss auch kein Problem sein. Wenn man's rechtzeitig entsprechend 
beruecksichtigt.
Laesst man's aber gepflegt unter den Tisch fallen, weil "ist ja 
Opensource", kann das Gesicht spaeter lang werden.

Gruss
WK

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Dergute W. schrieb:
> Das im Ausgangspost erwaehnte gzip ist aber schon mal GPL.

Ich hatte das so verstanden, dass gzip den Algorithmus meint, nicht die 
Implementierung.

von Dave (Gast)


Lesenswert?

Danke für die vielen Antworten.

Gibt's bei allen Verfahren eine Dekomprimierung zur Laufzeit. An sich 
haben wir mit der Dekomprimerungszeit nicht so das Problem. Datei wird 
wohl in einem Anwendungsfall über CAN zuerst an uns geschickt. Das 
dauert schon mal > 15 Minuten. Wenn das entpacken dann ein paar Minuten 
braucht geht das unter. Wenn das natürlich aber funktionieren würde, 
dass wir gleich einen empfangenen Block dekomprimieren und nur den 
entpacken Inhalt auf die SD Karte schreiben habe ich auch nichts 
dagegen.

Zur Info, wir sprechen von ASCII Files die rund 5MB unverpackt haben .gz 
sind es rund 750kB.

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Dave schrieb:
> Wenn das natürlich aber funktionieren würde,
> dass wir gleich einen empfangenen Block dekomprimieren und nur den
> entpacken Inhalt auf die SD Karte schreiben habe ich auch nichts
> dagegen.

Wenn du "Bloecke" einzeln komprimierst, kannst du sie auch einzeln 
wieder dekomprimieren. Wenn du dir erhoffst, einen komprimierten Blob in 
mehreren Bloecken zu uebertragen und die dann einzeln wieder zu 
dekomprimieren, muss das nicht immer funktionieren, kann aber evtl. wenn 
eben der Komprimieralgorithmus "das weiss", dass du da auf der anderen 
Seite blockweise dekomprimieren willst.

Gruss
WK

von MaWin (Gast)


Lesenswert?

Dave schrieb:
> über CAN zuerst an uns geschickt

Klingt wie Automotive.

Die Leute merken einfach nicht, wie weit sich sich schon mit untauglchen 
Entscheidnugen in die Scheisse geritten haben, und machen immer weiter, 
immer tiefer rein.

Man kann sicher sein, daß Tesla nicht so updated, damit ist es 
folgerichtig, daß die als Sieger hervorgehen werden.

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.