Цитата(XVR @ Nov 24 2010, 18:37)

Код
int32_t countChar;
Зачем 32 бита? У вас максимальный счетчик - 128
На самом деле 129. Можно обойтись и 16-тью.
Цитата(XVR @ Nov 24 2010, 18:37)

Код
countChar = (int32_t) pgm_read_byte_far(buf + L);
if (countChar < 0)
Если pgm_read_byte_far возвращает беззнаковый char то работать не будет
Как тогда быть? Что использовать вместо pgm_read_byte_far?
Цитата(XVR @ Nov 24 2010, 18:37)

Код
countChar = (MIN_RUN - 1) - countChar;
Это вообще не понял - там счетчик в чистом виде:
countChar &= 0x7F;Цитата(XVR @ Nov 24 2010, 18:37)

Код
while (countChar > 0)
{
c = pgm_read_byte_far(buf + L);
А вот это ошибка - мы 0 должны выводить, а не содержимое следующего байта флеша:
Код
while (countChar > 0)
{
c = 0;
Я брал код отсюда (PackBits Variant):
http://michael.dipperstein.com/rle/index.htmlНа инструментальной системе всё работает, поэтому на сам алгоритм я не особо грешу, а вот на реалтзацию для avr...
Надеюсь на вашу дальнейшую помощь.