[an error occurred while processing this directive]
|
u8_t data[29] =
// {0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,0x43,0x4F,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0xF0,0x70,0x70,0x70,0x70,0x70,0x70};
// {0x4F,0x4A,0x4F,0x4F,0x4F,0x4F,0x43,0x43,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0xF0,0x70,0x70,0x70,0x70,0x70,0xA0,0xA0};
{0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,0x43,0x4F};
u8_t RleBuf[40];static u8_t* __PackByRLE(u8_t *_src) {
u32_t i = 29 ;
u8_t *src = _src ;
u8_t *dst = RleBuf;
u32_t cnt = -1 ;
u32_t b1 ;
u32_t b2 ;///// initial read ////
*dst++ = (b1 = *src++);///// try to pack /////
while(--i) {
b2 = *src++;
if (b2 == b1) {
if (cnt == -1) {
*dst++ = b2;
}
cnt++;
} else {
if (cnt != -1) {
*dst++ = cnt;
cnt = -1 ;
}
*dst++ = b2;
}
b1 = b2;
}
///////check pads /////
if (cnt != -1) {
*dst++ = cnt;
}
///////////////////////
}
void TEST_RLE(void) {
__PackByRLE(data);
}
вроде работает
правда я сжатый поток пишу в другой буфер
E-mail: info@telesys.ru