Нужно ли уменьшать размер библиотек?

Например, в библиотеке RTClib есть коды для DS1307, DS3231, PCF8523 и softRTC. но я использую только DS3231, и мне не нужны дополнительные коды, чтобы занять мою флэш-память Arduino.

Выгружает ли Arduino IDE только те части библиотек, которые используются в скетче, или загружает всю библиотеку целиком?

, 👍1


2 ответа


Лучший ответ:

1

Обычно библиотека поддерживает различные типы компонентов; потому что в основном эти компоненты имеют много общих функций, поэтому это не позволяет создавать очень много разных библиотек.

Обратите внимание, что все функции, которые вы не вызываете в своей программе (и не вызываете из библиотеки), НЕ попадут в ваш скетч, поэтому также не повлияют на использование вашей флэш-памяти.

Если в библиотеке полно операторов if для создания различий между моделями, этот код находится внутри (если вызывается функция, вся функция сохраняется во флэш-памяти). (Если оператор if не может быть оценен во время компиляции, см. замечание Эдгара Боне ниже об оптимизации времени компоновки).

Поэтому, если вы хотите удалить этот "ненужный" код (по крайней мере, для вас), скопируйте библиотеку в свой проект и удалите ненужный код самостоятельно.

Однако я бы не стал этого делать, пока у вас не закончится флэш-память.

Вы можете выполнить простой тест:

  • Включите библиотеку и скомпилируйте скетч. Вы увидите (возможно) некоторую разницу.
  • Теперь вызовите функцию из библиотеки. Снова скомпилируйте скетч, и вы увидите, что использование флэш-памяти увеличилось. Это означает, что до этого эта функция не была частью вашего скомпилированного скетча.

Меня больше беспокоит использование памяти SRAM, но в основном буферы создаются в зависимости от модели, и SRAM не тратится впустую (поскольку, например, Arduino Uno имеет только 2 КБ).

,

Относительно «_если библиотека полна операторов if, чтобы различать модели, этот код находится в_»: начиная с версии 1.6.10 среда разработки Arduino [позволяет оптимизировать время компоновки](https://blog.arduino.cc/2016). /07/27/download-the-new-arduino-ide-1-6-10/), и это уже не всегда так. Если условия в if являются константами времени компиляции, оптимизатор замечает, что некоторые части кода недоступны, и отбрасывает их., @Edgar Bonet

@EdgarBonet Спасибо за это замечание; Я обновил свой вопрос (кредиты для вас). Я не знал об этой функции., @Michel Keijzers


1

IDE Arduino использует компилятор gcc.

Gcc — это оптимизирующий компилятор, и он довольно хорош в этом. Таким образом, в основном он будет хорошо идентифицировать и включать только те функции, которые вы действительно используете в своем коде.

Если у вас нет достаточного опыта, вы, вероятно, не справитесь с работой лучше, чем сам компилятор.

,