2012-01-13 16 views
6

Qualcuno ha provato a utilizzare la compressione zlib su un MSP430? Hai qualche consiglio su come compilare una libreria da utilizzare in un progetto MSP430 (sto usando IAR Embedded Workbench)?Compressione Zlib su MSP430

+1

Hai assolutamente bisogno di zlib? o solo un algoritmo di compressione? – Cyan

+0

http://stackoverflow.com/questions/3203321/lzw-compression-decompression-under-low-memory-conditions –

+0

http://stackoverflow.com/questions/3767640/compact-decompression-library-for-embedded-use –

risposta

1

L'ho creato per un numero di obiettivi, non specificamente MSP430, ma ciò non dovrebbe avere importanza. È tutto ISO C e dipende solo dalle chiamate alle librerie standard. Usa l'allocazione dinamica della memoria, quindi avrai bisogno di un mucchio.

+0

Grazie per la risposta. Sono stato in grado di costruire un piccolo programma di test per msp430 usando l'algoritmo di deflate, ma ho eseguito il nostro spazio di stack. Suppongo che questo abbia a che fare con l'ammasso che hai menzionato. Puoi approfondire questo argomento? – user1148476

+0

Il requisito dello stack è un altro problema. Normalmente si assegnerà una quantità di stack da qualche parte nell'avvio del runtime C. Se si utilizza qualsiasi tipo di IDE e strumento di configurazione del progetto, è un'opzione per questo. In alcuni casi il progetto assegnerà tutta la memoria residua dopo lo stack e l'allocazione statica all'heap, in altri potrebbe essere necessario specificare esplicitamente la dimensione dell'heap. Ad ogni modo, il mio punto di avere un mucchio è semplicemente che ne hai bisogno. Il successo di zlib sul tuo obiettivo dipenderà dall'avere una memoria sufficiente in generale e dal supporto dell'allocazione dinamica della memoria. – Clifford

2

Ho usato per costruire zlib come test per lo sviluppo del processore, ma mentre il mondo iniziava a passare a 64 bit il loro uso casuale di unsigned e unsigned senza intersezioni e mixaggio accurato, ecc. Avrebbe devastato i compilatori. Potrebbe essersi calmato adesso, ma mi sono allontanato dall'usarlo.

ha bisogno di una tonnellata di memoria, msp430 è particolarmente piccolo sul lato ram rispetto ad alcuni concorrenti.

Possiedo un simulatore msp430 che è possibile utilizzare http://github.com/dwelch67/msp430sim. che è facile da configurare per avere un sacco di RAM, più di quello che troverete in un chip. Althogh può ancora volere il pieno 64k e non lasciarti con nessuno. Ho solo bisogno di vedere cosa succede. Forse prenderò questo e provarlo da solo come test per il mio simulatore. Sul simulatore di cui sopra o forse su uno dei miei altri ho un diverso strumento di compressione usato che ha un'impronta di memoria molto (relativamente) piccola. Non sono sicuro se hai bisogno di zlib in particolare o se hai solo bisogno di una sorta di decompressione in generale.

8

In base a MSP430 datasheets e Wikipedia article, non si dispone di RAM sufficiente (ha al massimo 16 KiB) anche per la finestra scorrevole (32 KiB). Pertanto, non è possibile utilizzare alcun algoritmo di deflate per MSP430. Considerare ZLIB è un'implementazione di deflate giusto, anche per ZLIB. Anche se provi a scrivere la tua implementazione di deflate, non ci riesci. Perché, deflate ha bisogno di 32 KiB per il dizionario scorrevole e un po 'di memoria extra per i suoi alberi di huffman. Questo è solo per la parte di decompressione. Per la compressione, hai bisogno di memoria aggiuntiva per il finder della catena hash che è 7,5 * dimensione del dizionario = 240 KiB (in base all'implementazione della deflate di 7zip). Se hai davvero bisogno di compressione per questa piccola architettura, consiglio di guardare gli algoritmi di compressione LZSS codificati a byte personalizzati. Sono veloci e leggeri. Ma, non abbastanza forte da competere con la deflate a causa delle differenze di codifica particolarmente entropiche.

+0

Una buona presa su questo, mi ha fatto risparmiare un po 'di tempo a sperimentare. –

+0

Tenete a mente, la maggior parte degli algoritmi di compressione sono affamati di risorse. Alcuni di essi hanno un certo compromesso tra la potenza della CPU e la memoria (ad esempio, alcuni usano molta memoria con una piccola quantità di potenza della CPU o viceversa). È anche possibile trovare alcuni algoritmi che utilizzano fino a 13 memoria GiB. [Qui] (http://mattmahoney.net/dc/text.html) è un benchmark di riferimento che elenca sia il tempo di elaborazione che l'utilizzo della memoria per i comuni compressori. –

+0

Giusto, lo so, è stato un caso di non sapere quanto avrebbe voluto e il mio approccio era di sperimentare anziché di ricerca. Grazie per il collegamento che sarà abbastanza utile. –