Вот моя програмка для упаковки прошивки для ПЛИС.
Адаптированный Хафман для *.rbf
Hafm.zip ( 200.66 килобайт )
Кол-во скачиваний: 157Вот код распаковки, прошивка берется из внешней еепром, но это легко изменить.
Код
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;
}
Может поможет.