Schnelle Komprimierung auf einem Microcontroller

Gast #1855020
Hallo,

ich möchte auf einem Eingebetteten System mit einem lpc23xx (ARM7) mit 
64Kb Ram ein System realisieren, dass CAN-, LIN-, Analog- und Digitale 
Signale auf eine Compact Flash Speicherkarte abspeichert. Wenn die 
Aufzeichnung beendet ist, soll man die aufgezeichneten Daten von der 
Speicherkarte über TCP (100 MBit/s) an einen Rechner (Windows, Linux, 
...) übertragen.

Während der Übertragung der Daten, wird kein weiterer Code ausgeführt.

Die Compact-Flash Speicherkarte soll mit Kapazitäten von 8 oder gar 16 
GB verwendet werden.

Ich gehe davon aus, dass die sequentielle Lesegeschwindigkeit der 
CF_Speicherkarte höher ist, als die Übertragungsgeschwindigkeit von 
Ethernet 100 MBit/s.

Nun habe ich mir überlegt, ob ich die Dauer der Übertragung verkürzen 
könnte, wenn ich die Daten vor der Übertragung komprimieren würde.

Bei meinen Überlegungen bin ich zu dem Schluss gekommen, dass der 
Algothytmus folgende Eigenschaften haben sollte:

- Die Komprimierung muss schnell und einfach sein.
- Die Dekomprimierung darf aufwendig sein.
- Die Komprimierung muss verlustfrei sein.

Könnt ihr mir einen geeignetes Verfahren empfehlen ? Macht eine 
Komprimierung überhaupt Sinn, oder ist die CPU hierfür zu langsamm ?

Gruß

Tikonteroga
Tikonteroga schrieb:

> Ich gehe davon aus, dass die sequentielle Lesegeschwindigkeit der
> CF_Speicherkarte höher ist, als die Übertragungsgeschwindigkeit von
> Ethernet 100 MBit/s.

Herzlichen Glückwunsch wenn du es schaffen solltest, mit echten Daten, 
ganz egal woher du sie hast und sei es frei erfunden, mit einem ARM7 ein 
100Mbps Ethernet mit TCP ohne Komprimierung zu saturieren. Hast nämlich 
nur so um die 7 Takte pro Byte zur Verfügung.

Zur Orientierung: Ein 300MHz ARM9 NAS bläst bei gutem Wetter und FTP um 
die 20MB/s von Platte auf's Gigabit-Ethernet raus. Und es ist nicht die 
Platte, die begrenzt.
Gast
Leider ist die Komprimierung eigentlich immer aufwendiger als die 
Dekomprimierung ;)

Ob Komprimierung Sinn macht haengt ja von den Daten ab :) Dazu muesstest 
Du also auch noch was sagen.
Zumindest etwas aehnlich einem Run-length encoding macht aber denke ich 
bei einem Logging oft Sinn.
Gast
>ich möchte auf einem Eingebetteten System mit einem lpc23xx (ARM7) mit
>64Kb Ram ein System realisieren, dass CAN-, LIN-, Analog- und Digitale
>Signale auf eine Compact Flash Speicherkarte abspeichert.

Dann mach dir mal Gedanken zum Thema Wear Levelling.
Sporadische Pausen von 300-500ms beim schreiben sind zu erwarten.
Kannst du die puffern?
@  900ss D. (900ss)

>> Dann mach dir mal Gedanken zum Thema Wear Levelling.

>Macht das nicht die CF-Karte schon selbst?

Sicher, aber eben deshalb gibt es ab und an Pausen, in denen die Karte 
keine Daten mehr annimmt und man warten muss.

MfG
Falk

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.