Распаковка происходит в процессе вывода на экран, точнее заполнения сдвигового регистра, управляющего подачей напряжения на затворы транзисторов матрицы дисплея. Формат управляющей команды зависит от типа экрана.
Ну, я ж не утверждаю, что в 7 раз сжимается любой произвольно взятый кот… Более того, в 7 раз сжимается не кот, а типовой ценник типового магазина, причем это — среднее значение по целевой выборке. Некоторые сжимаются в 20 раз, некоторые на 20%. Увы.
Убедили. Реализации очень близкие. Разница в том, что вместо хранения ссылки и кода операции мы сразу распаковываем ее результат в RAM. Аргументация — удобство каскадирования с RLE и снижение числа обращений к флэшу. В остальном то же самое, код короче.
Я тоже так думал еще со студенческих времен. А теперь попробуйте посмотреть по-другому. Оба метода восстанавливают данные путем копирования ранее встретившейся последовательности. RLE копирует последовательность из одного символа много раз, LZ77 — последовательность многих символов один раз. Можно даже написать общий код, так, чтобы выбор алгоритма свелся к заданию параметров.
Да не особо. RLE — это оконное сжатие с размером окна, равным единице и кодированием количества повторений вхождения, вместо длины совпадения (поскольку длина совпадения либо 0, либо 1).
Справится. Если у Вас нет экстремистских запросов по памяти и энергопотреблению, берите RTX, для работы со стеком ее достаточно. В нашем случае они были (мы работаем с собственным high speed протоколом), но, возможно, мы переоценили их жесткость.
Влияет. Пришлось сделать маленькую RTOS, чтобы честно делить время между задачами… Об этом в одной из следующих серий.
(Вывод данных на экран в отсутствие видеобуфера и в присутствие крайней критичности к задержкам, оказался существенно более сильно лимитирующей задачей. Зато сжимая данные мы экономим на чтении и, особенно, записи в медленный флэш).
Nordic NRF51822 (Cortex M0 + Bluetooth LE). Купить можно на Диджике, на Маузере, у нас тоже можно в форме платформ для разработки с электронной бумагой и радиопротоколами (но реклама вроде запрещена, поэтому без подробностей, чтобы не забанили, тем более, что цель поста другая).
Спасибо.
Я вчера к вечеру утратил ясность мышления.
github.com/ariya/FastLZ/blob/master/6unpack.c — посмотрите сами реализацию.
И не забывайте, пожалуйста, главное — необходимость потоковой распаковки.
(Вывод данных на экран в отсутствие видеобуфера и в присутствие крайней критичности к задержкам, оказался существенно более сильно лимитирующей задачей. Зато сжимая данные мы экономим на чтении и, особенно, записи в медленный флэш).