Forum: Mikrocontroller und Digitale Elektronik AVR Zip in ASM


von Guest_uc (Gast)


Lesenswert?

Hallo FOrum,

hat schonmal jmd einen packungsalgorhitmus in ASM geschrieben und könnte 
den hier posten?

von Schnellpacker (Gast)


Lesenswert?

Für Tiny22 oder für Tiny 48?

von Klaus W. (mfgkw)


Lesenswert?

MOBY!!!

von Karl H. (kbuchegg)


Lesenswert?

Guest_uc schrieb:
> Hallo FOrum,
>
> hat schonmal jmd einen packungsalgorhitmus in ASM geschrieben und könnte
> den hier posten?

Was sind die genauen Anforderungen. Sprich welche Daten müsstest du 
packen.

Das Problem: ausgefuchste Pack-Algorithmen sind leider auch meistens 
recht umfangreich und benötigen zwischendurch viel Speicher. D.h. 
eventuell wirst du da abspecken müssen. Das hängt wiederrum nicht 
unwesentlich davon ab, welche Daten du packen musst, wie variabel die 
sind und was du dir davon erhoffst.

Wichtig wäre auch zu wissen, auf welchem Prozessor das ganze laufen 
soll. Auf einem Mega128 hat man mehr Spielraum als auf einem kleinen 
Tiny.

von sprotte24 (Gast)


Lesenswert?

Karl H. schrieb im Beitrag #4291888:
> Also sei nicht so. Schüttel eine Huffmann Kompression aus dem Ärmel, das
> es nur so staubt. Kann ja nicht so schwer sein. Ist doch praktisch
> selbsterklärend.

Der Herr heißt David A. Huffman, mit einem "n".

von Karl H. (kbuchegg)


Lesenswert?

sprotte24 schrieb:
> Karl H. schrieb im Beitrag #4291888:
>> Also sei nicht so. Schüttel eine Huffmann Kompression aus dem Ärmel, das
>> es nur so staubt. Kann ja nicht so schwer sein. Ist doch praktisch
>> selbsterklärend.
>
> Der Herr heißt David A. Huffman, mit einem "n".

Merci vielmals.

von EinGast (Gast)


Lesenswert?

Um wieder ontopic zu kommen: Ich wuerde mir gut ueberlegen, ob ich das 
in asm tun moechte ... du wirst eher fuer generisches c 
speicheroptimierte algorithmen finden, als fuer das asm eines atmegas.

von Heinz V. (heinz_v)


Lesenswert?


von Mark B. (markbrandis)


Lesenswert?

Guest_uc schrieb:
> Hallo FOrum,
>
> hat schonmal jmd einen packungsalgorhitmus in ASM geschrieben und könnte
> den hier posten?

Hallo Guest_uc,

hast Du schonmal einen sinnvollen Anwendungsfall hierfür definiert und 
könntest den hier posten?

: Bearbeitet durch User
von c-hater (Gast)


Lesenswert?

EinGast schrieb:

> Um wieder ontopic zu kommen: Ich wuerde mir gut ueberlegen, ob ich das
> in asm tun moechte ... du wirst eher fuer generisches c
> speicheroptimierte algorithmen finden, als fuer das asm eines atmegas.

Die Sprache ist bei diesem Problem mal überhaupt nicht das Problem, 
sondern einzig die fehlende RAM-Kapazität der allermeisten AVR8 und auch 
aller vergleichbaren µC derselben Klasse.

Es ist nunmal unmöglich, den optimalen Baum auch im worst case zu bauen, 
wenn der Speicher schon nichtmal für diesen blöden Baum selber reicht, 
geschweige denn, um parallel dazu auch noch wenigstens das aktuelle 
Input-Paket vollständig aufzunehmen.

UND: Wer das nicht selber erkennen kann, ist definitiv C-Programmierer 
(oder eigentlich eher: C&P-"Programmierer", also: struktureller 
Vollidiot, weil er den Algorithmus garnicht begreift, sondern nur 
Leichen fleddert)

Der einzige Ausweg aus der generellen RAM-Misere kleiner µC ist 
natürlich die Veringerung der Bitbreite der Datenwörter für den 
Algorithmus. Das erzwingt i.d.R. allerdings überproportional längliche 
Verarbeitungszeiten und recht lausige Kompressionsergebnisse.

Aber immerhin: Mit Assembler kann man hier wenigstens bezüglich der 
Verarbeitungszeiten sehr gut punkten. Mit Teilen von "char" kann C 
nämlich nicht gerade sehr effizient umgehen. Allerdings: auch der 
Assembler-Vorteil macht die Sache insgesamt höchstens dann sinnvoll 
brauchbar, wenn die zu packenden Daten irgendwie "günstig" bezüglich des 
Packens strukturiert sind, was leider nur recht selten der Fall ist.

Einziges Gegenbeispiel, was mir dazu auf Anhieb einfällt: Text. Hier 
kann man  mittels Huffman-Encoding mit 4Bit-Datenwörtern tatsächlich 
nochmal erheblich Speicher sparen. Und sowohl Encoder als auch Decoder 
dafür sind selbst auf sehr kleinen AVR8 (sinnvoll so etwa ab Tiny13) 
zumindest einigermaßen effizient in Asm realisierbar.

Wobei hier berücksichtigt ist, das zumindest der Mehrverbrauch an Flash 
durch den Entpacker nennenswert geringer sein sollte als der erzielte 
Gewinn beim Packgut. Das ist selbst bei den ganz kleinen AVR8 mit nur 
1kB Flash relativ leicht zu erreichen, wenn deren Flash zu etwa einem 
Drittel oder mehr mit Stringkonstanten vollgemüllt ist.

von Marcus H. (Firma: www.harerod.de) (lungfish) Benutzerseite


Lesenswert?

Für moderne Kompressionsalgorithmen sind die AVRs nicht wirklich die 
erste Wahl. Ich kann mir nicht vorstellen Piedpiper und Konsorten auf 
einem Tiny10 zu implementieren. Da fehlt schon der Speicher.

Was aber tatsächlich Sinn machen kann, ist eine RLE oder 
Deltakompression.
Ich kann Dir leider keinen fertigen Code anbieten, aber die Links 
sollten helfen:
https://de.wikipedia.org/wiki/Laufl%C3%A4ngenkodierung
https://en.wikipedia.org/wiki/Delta_encoding

Bei den richtigen Daten kann das den mittleren(!) Durchsatz über eine 
langsame serielle Schnittstelle gewaltig erhöhen.

von Axel S. (a-za-z0-9)


Lesenswert?

c-hater schrieb:
> Die Sprache ist bei diesem Problem mal überhaupt nicht das Problem,
> sondern einzig die fehlende RAM-Kapazität der allermeisten AVR8 und auch
> aller vergleichbaren µC derselben Klasse.

Marcus H. schrieb:
> Für moderne Kompressionsalgorithmen sind die AVRs nicht wirklich die
> erste Wahl.

Ach Leute. Das Problem ist nicht der Mangel an Kompressionsalgorithmen 
(respektive Implementierungen) sondern daß man im Gegenteil damit 
zugeschmissen wird. Und zwar insbesondere auch mit Varianten die 
besonders geringen Resourcenverbrauch beim Entpacken haben.

Eine konkrete Empfehlung kann man aber nicht aussprechen ohne etwas über 
die zu (ent)packenden Daten zu wissen. Womöglich reicht ja schon RLE als 
Kompressionsverfahren.

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.