Подтвердить что ты не робот

Как объединить строки С++ и Arduino Strings?

Я писал библиотеку для своего проекта (сейчас я использую Arduino). Проблема, которая у меня есть, заключается в том, что string в С++ и в Arduino отличаются.

То есть, я хочу, чтобы моя библиотека была независимой от Arduino, поэтому я использую #include <string> и позже объявляю string s;. Однако в Arduino строки определены Arduino и объявлены String s2.

Когда я включаю свою библиотеку в эскиз, я получаю error: string: No such file or directory в строке, где я пытаюсь включить строковую библиотеку С++ (#include <string>).

Есть ли способ заставить Arduino использовать библиотеку строк С++ или преобразовать строку в строку Arduino при компиляции?

4b9b3361

Ответ 1

Несколько вещей:

  • Я не уверен в твоем разумении делать что-то независимое от Ардуино. Обычно программирование микроконтроллера не является чем-то очень модульным и может сильно отличаться от классической компьютерной программы. Если вы действительно хотите быть независимыми от любого микроконтроллера и любой платформы, вы все равно можете использовать строки в стиле C, а char * указывать на массив символов.
  • Выполнение того, что вы хотели бы сделать, совсем не просто. Прежде всего, вам понадобится исходный код вашей библиотеки std::string. Выполнение #include <string> недостаточно: вы также должны скомпилировать библиотеку строк для платформы AVR.
  • Существуют некоторые "ограничения" в том, как Arduino обрабатывает код С++ по сравнению с классической компьютерной программой: например, операторы new и delete не реализованы. Более того, для реализации std::string может потребоваться другое, поэтому для Arduino требуется слишком много зависимостей, или размер исходного кода слишком большой.

Существует несколько реализаций классических струнных инструментов для микроконтроллера AVR, такого как Arduino, но они выполняются процедурно (а не объектно-ориентированным способом) для строк C-стиля. Например, для avr-libc, следующего с avr-gcc, вы можете увидеть список функций здесь: avr-libc string.h У вас даже есть старый добрый printf: avr-libc stdio.h

Можно использовать их с Arduino, если вы добавляете хорошие заголовочные файлы в свой код, но остерегайтесь размера своего кода! Просто использование printf может увеличить размер на несколько килобайт, что может быть огромным для микроконтроллера в зависимости от ваших потребностей.

В заключение, на мой взгляд, единственным переносным способом было бы использовать строку char *, http://arduino.cc/en/Reference/String