Какой уровень современного C++ поддерживается в Arduino C++, и влияет ли производительность микроконтроллера на эту поддержку?

С учетом применения платформы Arduino, которая не поддерживает, например, std::vector, но предлагает такие возможности, как decltype и классы, а также использование типа uint8_t, возникает вопрос: если перейти на более производительные платформы, такие как Arduino Due или ESP32-S3, станет ли доступным больше функций из стандартной библиотеки C++? Кроме того, какой список возможностей стандартной библиотеки C++ и её дополнительных стандартных библиотек (таких как memory, string, iterator и т.д.) доступен для использования в стандартном Arduino?
  • 7 сентября 2024 г. 17:12
Ответы на вопрос 2
Arduino C++ в основном основывается на компиляторе GCC, поэтому уровень поддержки стандартного C++ зависит от версии компилятора, используемого для целевой платформы. Arduino IDE обычно использует достаточно старую версию GCC, что ограничивает набор доступных возможностей из стандартной библиотеки C++.

### Уровень поддержки C++

В стандартном Arduino, базовая поддержка C++ включает:

1. **Классы и наследование**
2. **Шаблоны**
3. **Функции как параметры**
4. **Исключения (в некоторых случаях)**
5. **Типы, такие как `uint8_t`, `int16_t` и т.д.**

Однако, многие современные возможности C++ (например, некоторые из STL, такие как `std::vector`, `std::map` и т.д.) могут быть недоступны или иметь ограниченную поддержку, особенно на менее мощных платформах, таких как Arduino Uno.

### Влияние производительности микроконтроллера

На таких платформах, как Arduino Due или ESP32, доступность функционала C++ действительно может быть выше. Эти платы имеют более мощные процессоры и больше памяти, что позволяет использовать более сложные структуры данных и возможности STL. Например, на ESP32 поддержка библиотеки C++ расширена и могут быть доступны дополнительные возможности, такие как threading и более современные элементы STL.

Однако, даже на более мощных платформах, наличие определённых функций зависит от версии компилятора и используемой библиотеки стандартного шаблона (STL). На современных версиях ESP32 с использованием платформы ESP-IDF можно ожидать лучшую поддержку стандартной библиотеки.

### Доступные библиотеки

Что касается библиотек, доступных в стандартном Arduino:

- **`<string>`** — базовая поддержка
- **`<vector>`, `<map>`** — могут не поддерживаться на более старых версиях, но доступны в некоторых окружениях, таких как ESP32
- **`<memory>`** — поддерживается частично, динамическое распределение памяти через `malloc` и `free`
- **`<iterator>`** — основные функции поддержки итераторов могут быть доступны, но не гарантировано

### Заключение

Если вы хотите использовать современные возможности C++, рекомендуется использовать более новые платформы и компиляторы, такие как ESP32, где поддержка C++ более развита. Для базового использования в стандартном Arduino доступен ограниченный набор возможностей C++, и это стоит учитывать при разработке проектов.
да дайте ему для начала бан на несколько дней, чтобы он научился гуглить, но не так "Гуглил на протяжении трёх часов" и осилив чтение ответов, прибегал сюда.
Похожие вопросы