Какой новейший способ использования стандартных библиотек C++ в Arduino 1.8.2?

(Моя версия Arduino — 1.8.2.)

Например, если я хочу #include <vector> или <string>, <iostream> , <memory> и т. д., компилятор всегда жалуется, что такие библиотеки не найдены.

Итак, каков новейший/наиболее эффективный способ использования библиотек C++ в Arduino 1.8.2?

, 👍1

Обсуждение

Было бы неплохо, но имеющиеся ресурсы памяти (Arduino Uno, 2КБ SRAM) затрудняют реализацию и использование этого. 2 КБ должны содержать все данные, стек и кучу; https://www.nongnu.org/avr-libc/user-manual/malloc.html, @Mikael Patel


1 ответ


2

Большая часть ядра Arduino не включает стандартную библиотеку C++, поэтому такие заголовки, как <vector> и <string>, отсутствуют. Это решение имеет большой смысл, поскольку STL в значительной степени зависит от распределения кучи, что может испортить небольшую оперативную память микроконтроллера.

Если вы ищете альтернативу STL, вы можете воспользоваться ETL, встроенной библиотекой шаблонов.. Однако код не будет одинаковым, поскольку все контейнеры ETL имеют фиксированную емкость. Вот, например, строка:

etl::string<32> s = "hello world";

На практике я никогда не видел проекта, использующего ETL. В большинстве проектов используются стандартные классы Arduino (String, Stream, Print...) и научитесь жить со своими недостатками. Поскольку в ядре Arduino нет универсальных классов-контейнеров, обычно используются старые добрые массивы C.

,