реклама на сайте
подробности

 
 
> алгоритм декомпрессии LZMA, для прошивки ПЛИС
cornflyer
сообщение Nov 22 2009, 14:43
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 166
Регистрация: 11-07-06
Из: Dubna
Пользователь №: 18 729



Есть желание программировать ПЛИС (xilinx spartan 3) из процессора (lpc2148)
Сжал утилитой LZMA прошивку для ПЛИС (файл *.rbt) размером 1.8 Mb,
получился файл 12kb.

Как этот файл подшить в мой проект? (использую Keil)
Т.е. как его запихнуть во FLASH и потом прочитать?
Может есть у кого-нить готовый код?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
cornflyer
сообщение Nov 23 2009, 23:29
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 166
Регистрация: 11-07-06
Из: Dubna
Пользователь №: 18 729



вот код для распаковки 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;
}
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th July 2025 - 21:19
Рейтинг@Mail.ru


Страница сгенерированна за 0.01356 секунд с 7
ELECTRONIX ©2004-2016