Библиотека ArduinoShrink уменьшает размер кода, увеличивает скорость прошивки Arduino AVR

Предполагается, что ядро Arduino AVR уже будет эффективным, поскольку полученный код будет работать на микроконтроллерах AVR ATmega168 и ATmega328 с внутренней флеш-памятью от 16 до 32 КБ и тактовой частотой от 8 до 16 МГц.

Nerd Ralph чувствовал, что есть место для улучшения, так как, например, образец Blink занимает 924 байта флеш-памяти при компиляции для Arduino Uno. Поэтому он разработал библиотеку ArduinoShrink с теми же функциями, что и Arduino AVR Core, включающую файлы прошивки меньшего размера и увеличенной скоростью.

Результат довольно впечатляющий, как мы можем видеть на скриншоте выше, где образец Blink теперь занимает всего 196 байт или почти на 80% меньше размера.

Так как же именно удалось достичь таких результатов? Nerd Ralph подробно объясняет это в своем блоге, но, если коротко обобщить, были предприняты следующие основные шаги:

  1. Напишите модульный автономный код вместо предоставления одной статической библиотеки, как в Arduino AVR Core.
  2. Перепишите часть кода на ассемблере AVR, особенно код, который часто плохо оптимизируется компилятором, например, подпрограммы обслуживания прерываний.

Помимо уменьшения размера кода, ArduinoShrink также может ускорить код. Например, прерыванию timer0 обычно требуется 5 мкс для запуска блокирующего прерывания в процессе, но первая инструкция в ISR ArduinoShrink – это ‘sei’, что позволяет запускать другие прерывания, уменьшая влияние задержки на несколько циклов больше, чем аппаратный минимум. Это также может снизить энергопотребление и продлить срок службы батареи.

Одним из недостатков текущей версии является то, что компилятор должен иметь возможность определять номер вывода для цифровых функций ввода-вывода во время компиляции, а avr-gcc не всегда может распознать, что вывод является константой времени компиляции. Nerd Ralph планирует написать более портативную версию функции digitalWrite, которая так же будет меньше и быстрее.

Если вы хотите попробовать, перейдите в репозиторий Github и установите ArduinoShrink в среде Arduino IDE. Это не первый проект оптимизации Arduino от Nerd Ralph, поскольку он ранее писал picoCore для микроконтроллеров AVR серий ATtiny13 и ATtiny85.

Выражаем свою благодарность источнику из которого взята и переведена статья, сайту cnx-software.com.

Оригинал статьи вы можете прочитать здесь.

0 0 votes
Article Rating
Подписаться
Уведомление о
guest

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

0 Комментарий
Inline Feedbacks
View all comments