cornflyer 0 22 ноября, 2009 Опубликовано 22 ноября, 2009 · Жалоба Есть желание программировать ПЛИС (xilinx spartan 3) из процессора (lpc2148) Сжал утилитой LZMA прошивку для ПЛИС (файл *.rbt) размером 1.8 Mb, получился файл 12kb. Как этот файл подшить в мой проект? (использую Keil) Т.е. как его запихнуть во FLASH и потом прочитать? Может есть у кого-нить готовый код? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VslavX 0 22 ноября, 2009 Опубликовано 22 ноября, 2009 · Жалоба В Инете есть такая утилитка - file2carray называется. Исходничек Здесь Там буквально сотня строк, генерирует из любого файла исходные данные для инициализации C-массива. Пишете: const #include "имя_файла_сгенерированного_утилитой" и получаете нужный массив в прошивке. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
cornflyer 0 22 ноября, 2009 Опубликовано 22 ноября, 2009 · Жалоба не хватает хэд-файлов для компиляции этой утилиты :( может есть уже откомпилированная? под линукс или под винду - любому бинарику буду рад :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VslavX 0 22 ноября, 2009 Опубликовано 22 ноября, 2009 · Жалоба Используемый мной вариант под win32 - в аттаче f2a.rar Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
cornflyer 0 22 ноября, 2009 Опубликовано 22 ноября, 2009 · Жалоба спасибо! кажеца работает!!! щас попробую распаковать процессором свой архив и прошить ПЛИС Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KAlex 0 23 ноября, 2009 Опубликовано 23 ноября, 2009 · Жалоба Вот моя програмка для упаковки прошивки для ПЛИС. Адаптированный Хафман для *.rbf Hafm.zip Вот код распаковки, прошивка берется из внешней еепром, но это легко изменить. void programm_acex(void){ unsigned int bytecounter; unsigned char outbyte, cnt1s; unsigned char a[16]; i2c_start_wait(EEPROM_24256+I2C_WRIT); i2c_write(acexhex >> 8); i2c_write(acexhex & 0xFF); i2c_rep_start(EEPROM_24256+I2C_READ); for (outbyte=0;outbyte<16;outbyte++) a[outbyte] = i2c_readAck(); acc = i2c_readAck(); acnt = 8; bytecounter = 0; for (;;) { outbyte = 0; if ( get1bit() ) { for (cnt1s=1;cnt1s<5;cnt1s++) if (!(get1bit())) break; if (cnt1s == 5) for (cnt1s=0;cnt1s<8;cnt1s++) outbyte = (outbyte << 1) + get1bit(); else { cnt1s = ((((cnt1s-1)<<1) + get1bit())<<1)+get1bit(); outbyte = a[cnt1s]; } } outbyte2acex(outbyte); if ( bytecounter++ == acexsize) break; } outbyte2acex(0); outbyte2acex(0); i2c_readNak(); i2c_stop(); } unsigned char get1bit(void){ unsigned char retval; retval = ((acc&0x80) != 0); acc <<= 1; if ( !(--acnt) ) { acc = i2c_readAck(); acnt = 8; } return retval; } Может поможет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
cornflyer 0 23 ноября, 2009 Опубликовано 23 ноября, 2009 · Жалоба вот код для распаковки LZMA... правда это для винды можно ли портировать под ARM7 - пока не знаю... для распаковки похоже выделяется память ~ 16kb хотя это можно уменьшить если сжимать с опциями, т.е. LZMA e file.bin file.lzma -lc0 -lp2 #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; } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KRS 0 24 ноября, 2009 Опубликовано 24 ноября, 2009 · Жалоба вот код для распаковки LZMA... правда это для винды можно ли портировать под ARM7 - пока не знаю... для распаковки похоже выделяется память ~ 16kb хотя это можно уменьшить если сжимать с опциями, т.е. LZMA e file.bin file.lzma -lc0 -lp2 код портировать не надо он прекрасно компилится IAR, RVCT, GCC для распковки надо 3 файла types.h lzmadec.* размер памяти нужный для распаковки - размер словаря + 1846 + (768 << (lc + lp))) я как раз тоже недавно применял этот алгоритм для загрузки альтеры и блекфина. по быстродействию здесь писал http://electronix.ru/forum/index.php?showtopic=68880 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AltemirX 0 30 января, 2012 Опубликовано 30 января, 2012 · Жалоба код портировать не надо он прекрасно компилится IAR, RVCT, GCC Можно узнать, сколько в Вашей реализации использовалось RAM и FLASH для декодера (включая размер словаря) применительно к тестам? Сколько сейчас в проектах тратите на это? Можно ли уменьшать размер словаря? Реально ли вписаться в 8КБ Flash и 2КБ RAM? KAlex А у вас нет тестов скорости для случая, если прошивка лежит во FLASH-памяти самого МК? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться