Страница 1 из 2
Алгоритм компрессии AVR
Добавлено: Чт июл 09, 2009 00:28:56
BCluster
Привет всем. Задачу решить нужно )
дано много матриц целых чисел 0..65535, размерностью 20х12. Задача состоит в том, чтобы впихнуть в контроллер как можно больше этих матриц - ибо одна получается 480 байт, что для аврки многовато. Вопрос в том, можно ли как то компрессировать эти данные? Может кто сталкивался?
Добавлено: Чт июл 09, 2009 06:05:15
Mamonth
Может есть смысл рассчитывать эти таблички на ходу?
Добавлено: Чт июл 09, 2009 07:00:46
ARV
ну, предположим, для меги128 эти таблички просто тьфу - их можно напихать кучу во FLASH. так что вопрос некорректный по сути - без указания конкретной меги.
кроме того, какого рода данные хранятся в этих табличках? и как они должны использоваться? алгоритмов компрессии известно много - от кодирования групп повторяющихся байтов RLE до LZW и его разновидностей. LZW скорее всего не пойдет, т.к. довольно требовательный к объему ОЗУ (по меркам AVR), а вот RLE запросто.
но ведь на распаковку перед использованием уйдут ресурсы МК... это тоже не стоит забывать
Добавлено: Чт июл 09, 2009 07:58:16
GP1
Это принципиально хранить все таблицы в аврке?
на компрессию/декомпресию уйдет туева хуча ресурсов, да и времени на это будет уходить море.
может просто внешнюю память прицепить?
Добавлено: Чт июл 09, 2009 10:00:33
BCluster
проц - мега168. И так все будет во флэше. Компрессия будет производиться на большом компутере, хранить принципиально надо в аврке ) Скорость работы не принципиальна - аврка практически ничего не делает - данные - время включения и выключения устройств.
RLE это хорошо, но его эффективность с числовыми данными для меня очень сомнительна, я не очень понимаю что он сможт там сжать. Поясните, если не трудно
Данные - инты, от 0 до 65535, просто числа. Размерность возьмем 3х20 Например
Код: Выделить всё
0 20 132 153 131 ... 4346
10 23 543 433 234 ... 4533
1 7 9 12 25 ... 14
Добавлено: Чт июл 09, 2009 10:05:28
GP1
BCluster писал(а):...Скорость работы не принципиальна - аврка практически ничего не делает - данные - время включения и выключения устройств.
Тогда я вообще не вкурю, зачем здесь АВРка?
Добавлено: Чт июл 09, 2009 10:09:43
BCluster
Я ж не сказал что она ничего не делает - делает, например управляет исполнительными устройствами по SPI, индикаторами и т.д.
Добавлено: Чт июл 09, 2009 10:17:05
GP1
Ну так по-любому, у вас сразу все таблицы использоваться на будут, организуйте динамическую загрузку по мере необходимости, вы же пишете о большом компутере, да и управлять переферией можно прямо с компа. АВРка нужна при автономной работе, ну и для того чтобы сбросить собранные данные на комп.
Может я чего не допонимаю, проникнуть в суть ваших замыслов не имею возможности, не эктрасекс

Добавлено: Чт июл 09, 2009 10:21:13
Lonleystranger
Я так понимаю задачка контрольной для института. Примените самый простой алгоритм - если размер массива известен, оставьте пустое место равное массиву, остальное забивайте так: если есть повторяющаяся последовательность знаков-пишете сколько знаков повторяются, далее сам знак и бит, естественно присутствия сжатия. Распаковываете такие массивы в пустое пространство по очереди. Вот и все. Собственно самый простой и самый малоэффективный метод. Зато занимает мало ресурсов контроллера (в смысле не памяти, а программного кода

). Если посложнее - почитайте
http://book.itep.ru/2/26/comp_26.htm
http://ru.wikipedia.org/wiki/Сжатие_данных
Добавлено: Чт июл 09, 2009 10:22:28
BCluster
эмс )) действительно я неясно выражаюсь. тупое начало дня сегодня

Устройство полностью автономно ) динамически подгружать не получится)
Добавлено: Чт июл 09, 2009 10:25:44
GP1
Может все же откроете секрет

, что за девай вы там собираетесь замутить? Хотя бы чем должно управлять и какие данные собирать/отправлять.
Добавлено: Чт июл 09, 2009 10:29:53
Student_X
... а не проще запихнуть эти данные в какую-нибудь 24сХХХ и вытаскивать их оттуда по мере необходимости ? ...
Добавлено: Чт июл 09, 2009 10:31:05
GP1
Student_X писал(а):... а не проще запихнуть эти данные в какую-нибудь 24сХХХ и вытаскивать их оттуда по мере необходимости ? ...
я уже предлагал - отвергнуто

Добавлено: Чт июл 09, 2009 10:33:41
Student_X
... ну тогда это называется "угадай мелодию" - хочу то не знаю что

Добавлено: Чт июл 09, 2009 10:45:13
BCluster
девайс имеет 60 режимов - каждый этот режим - такая вот матрица. Задача запихнуть все это в 168 мегу. Грубо говоря есть 4 плеера и нуна включать разные файлы для каждого режима в определенные моменты времени. Еще есть вариант хранить эти данные в нанде с которым работает непосредственно плеер - но это сложно с другой стороны - под плеер придется писать софт, а там все малость не так, как я привык. Внешнюю память может быть и можно подключить, но этот вариант стоит рассматривать как последний - на плате для него места нет, и васче

Добавлено: Чт июл 09, 2009 11:01:56
GP1
Насколько я разбираюсь в колбасных обрезках, для управления 4-мя(у) устройствами нужно 4 управляющие матрицы, они у вас по 480 байт - итого 1920 байта, не такая уж и большая нагрузка на память.
Добавлено: Чт июл 09, 2009 11:16:04
Student_X
... площадь которую занимает планарка 24с256 меньше 1см в квадрате и всего пару линий для чтения\записи .... ну и 150-200 байт кода на ассемблере

Добавлено: Чт июл 09, 2009 11:44:48
BCluster
Насколько я разбираюсь в колбасных обрезках, для управления 4-мя(у) устройствами нужно 4 управляющие матрицы, они у вас по 480 байт - итого 1920 байта, не такая уж и большая нагрузка на память
480 байт это матрица на все 4 устройства. Но - 60 режимов - 28800 байт. Задача не стоит конкретно - 60 режимов и все. Просто нужно запихать как можно больше этого дела в камень.
Добавлено: Чт июл 09, 2009 12:04:13
BCluster
Задача не для института. Эт раз. Два - данные числовые, поэтому говорить о повторяющихся последовательностях трудно.
Добавлено: Чт июл 09, 2009 14:23:21
Lonleystranger
BCluster писал(а):Два - данные числовые, поэтому говорить о повторяющихся последовательностях трудно.
Повторяющиеся последовательности есть везде, надо найти закономерность, впрочем решать Вам, и книжечки гляньте, полезные. Я когда-то составлял матрицу для управления светодиодами, но там я знал эти последовательности, где прямые(допустим 10 байт)-заменял на 2 байта (1 описание, 1 содержание), где обратные- тоже два байта, в описательном бит знака сброшен. Опять-же говорю-Вам решать, никто в проблеме лучше не разбереться, по крайней мере если суть не знать
