Для обеспечения совместимости программного обеспечения библиотеки Arduino должны работать на различных типах оборудования от 8-битных микроконтроллеров с ограниченным объемом памяти до более мощных 32-битных чипов, таких как STM32 Arm Cortex-M MCU или двухъядерный ESP32 Tensilica WiSoC. которые могут получить доступ к большему объему ОЗУ.
Все это хорошо, но в некоторых случаях может сказаться на производительности. Ларри Банк заметил это, когда искал программы просмотра JPEG для Arduino, и нашел только те, которые жертвовали скоростью, чтобы работать на микроконтроллерах с очень небольшим объемом оперативной памяти. Поэтому он начал работать над библиотекой JPEDDEC JPEG Arduino, оптимизированной по скорости и совместимой с любым микроконтроллером с как минимум 20 КБ ОЗУ.
Оптимизация выходит за рамки простой загрузки дополнительных данных в память, как объясняет Ларри в сообщении блога, библиотека также выполняет удаление заполненных байтов, оптимизирует части декодирования Хаффмана и DCT и многое другое.
Некоторые из ключевых функций библиотеки включают:
- Поддержка любого микроконтроллера с не менее 20 КБ ОЗУ
- Данные изображения JPEG могут поступать из памяти (FLASH / RAM), SD-карты или другого носителя
- Простой дизайн классов и обратного вызова позволяет легко добавить поддержку JPEG в любое приложение.
- Код C, выполняющий тяжелую работу, переносим и не имеет внешних зависимостей.
- Параметры быстрого уменьшения масштаба (1/2, 1/4, 1/8).
- Возможность обнаружения и декодирования встроенного скетча Exif
- Поддержка базовых изображений адаптивного алгоритма Хаффмана (оттенки серого или YCbCr)
Вы найдете библиотеку JPEGDEC Arduino на Github. Ларри также разработал скетч (jpeg_perf_test.ino) и запустил его на популярных микроконтроллерах, включая ESP8266, ESP32 и различные микроконтроллеры Arm Cortex-M0 + / M4F / M7 с использованием изображений 640 × 480.
Скорость полного декодирования составляет от 1,3 секунды на Cortex-M0 + @ 48 МГц до всего 29,6 мс на кроссоверном процессоре NXP i.MT 1062 Cortex-M7 с тактовой частотой 600 МГц, установленном на плате Teensy 4.0. Пол Стоффреген, создатель платы Teensy, на видео, представленном ниже, использовал библиотеку JPEGDEC Arduino. Вы можете оценить производительность, используя его собственный скетч, считывая фотографии с карты MicroSD, декодируя их с помощью JPEGDEC и отправляя результат на SPI-дисплей. Просто подождите, пока он не нажмет кнопку, чтобы ощутить настоящую скорость.
Вы можете подумать, что это не репрезентативная демонстрация, поскольку процессор NXP настолько быстр, что он похож на стандартный прикладной процессор. Ларри загрузил собственное демонстрационное видео, используя Adafruit PyPortal на базе микроконтроллера Microchip SAMD51 Cortex-M4F @ 120 МГц.
Выражаем свою благодарность источнику из которого взята и переведена статья, сайту cnx-software.com.
Оригинал статьи вы можете прочитать здесь.