Код
int32_t countChar;
Зачем 32 бита? У вас максимальный счетчик - 128
Код
countChar = (int32_t) pgm_read_byte_far(buf + L);
if (countChar < 0)
Если pgm_read_byte_far возвращает беззнаковый char то работать не будет
Код
countChar = (MIN_RUN - 1) - countChar;
Это вообще не понял - там счетчик в чистом виде:
countChar &= 0x7F;Код
while (countChar > 0)
{
c = pgm_read_byte_far(buf + L);
А вот это ошибка - мы 0 должны выводить, а не содержимое следующего байта флеша:
Код
while (countChar > 0)
{
c = 0;