es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

ZLIB con bajo consumo de memoria.

Estoy trabajando en un dispositivo incrustado (STM32) con 5kb de memoria FLASH libre. Estoy tratando de comprimir una string con la biblioteca zlib.
Creé una función AQUÍ y devuelve -2 (Z_STREAM_ERROR).

Lo que hice fue:

  • En zconf.h, cambié el valor de MAX_MEM_LEVEL a 1 y MAX_WBITS a 5 para reducir el uso de memoria. Pero aún así devuelve -2 (Z_STREAM_ERROR).

Luego encontré esto en deflate.c, donde no puedo reducir MAX_WBITS por debajo de 8:

if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method != Z_DEFLATED ||
        windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||
        strategy < 0 || strategy > Z_FIXED || (windowBits == 8 && wrap != 1)) {
        return Z_STREAM_ERROR;
}
if (windowBits == 8) windowBits = 9;  /* until 256-byte window bug fixed */

Entonces lo establecí en MAX_MEM_LEVEL a 1 y MAX_WBITS a 8, pero cuando intento compilar, siempre devuelve region FLASH overflowed by 15960 bytes. Parece que me quedé sin memoria.

Luego intenté otro ejemplo:

  • Siguiendo con el ejemplo de zpipe.c con CHUNK definido como 1024.

El resultado sigue siendo el mismo, region FLASH overflowed by 15960 bytes.
¿Hay alguna otra forma de hacerlo con solo 5kb de memoria FLASH restante?

Nota:
– La RAM también tiene 5kb restante.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en C++, sistemas embebidos y zlib, sugiero probar los siguientes pasos para comprimir tu cadena con una memoria FLASH y RAM limitada:

    1. Intenta utilizar una biblioteca de compresión diferente que requiera menos sobrecarga de memoria que zlib. Por ejemplo, podrías probar con lz4 o snappy, ambos diseñados para su uso en sistemas embebidos.

    2. Si es necesario utilizar zlib, intenta reducir el tamaño de la cadena que estás intentando comprimir. Esto reducirá la cantidad de memoria requerida por el algoritmo de compresión.

    3. Asegúrate de utilizar la configuración optimizada del compilador para tu dispositivo embebido y haber habilitado cualquier optimización relevante del compilador, como la inlining de funciones y el unrolling de loops.

    4. Considera utilizar un algoritmo de compresión en streaming que te permita comprimir la cadena en trozos más pequeños y manejables. Esto puede ayudar a reducir los requisitos de memoria para el algoritmo de compresión.

    5. Si todo lo demás falla, es posible que necesites actualizar a un dispositivo embebido con más memoria para realizar la operación de compresión requerida.

Comments are closed.