вот код для распаковки LZMA... правда это для винды
можно ли портировать под ARM7 - пока не знаю...
для распаковки похоже выделяется память ~ 16kb
хотя это можно уменьшить если сжимать с опциями, т.е.
LZMA e file.bin file.lzma -lc0 -lp2
CODE
#include "LzmaDec.h"
#include "Types.h"
#include "fpga_config.h" // архив lzma
VOID *MyAlloc (size_t size);
VOID MyFree (VOID *address);
static void *SzAlloc(void *p, size_t size) { p = p; return MyAlloc(size); }
static void SzFree(void *p, void *address) { p = p; MyFree(address); }
static ISzAlloc g_Alloc = { SzAlloc, SzFree };
VOID *MyAlloc (size_t size) {
return VirtualAlloc(0, size, MEM_COMMIT, PAGE_READWRITE);
// return malloc(size);
}
VOID MyFree (VOID *address) {
VirtualFree(address, 0, MEM_RELEASE);
//free(address);
}
int main (int argc, char *argv[]){
Byte obuf[50]; // буфер для распакованных данных
SizeT destLen = sizeof(obuf);
SizeT srcLen = sizeof(fpga_config) - 13; // 13 - размер шапки LZMA архива в байтах
ELzmaStatus status;
Byte * src = fpga_config + 13; // адрес начала данных
Byte * dest = obuf;
Byte * propData = fpga_config; // адрес шапки LZMA архива
LzmaDecode(
dest,
&destLen,
src,
&srcLen,
propData,
LZMA_PROPS_SIZE,
LZMA_FINISH_END,
&status,
&g_Alloc
);
DeleteFile ("config");
int config_file = OpenFile ("config", VAL_TRUNCATE, VAL_OPEN_AS_IS, VAL_ASCII);
WriteLine (config_file, obuf, 30);
CloseFile (config_file);
return 0;
}