Как объединить строки C ++ и Arduino? - PullRequest
12 голосов
/ 23 марта 2012

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

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

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

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

1 Ответ

10 голосов
/ 23 марта 2012

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

  1. Я не уверен в том, что вы делаете что-то независимое от Arduino. Обычно программирование микроконтроллера не является чем-то очень модулируемым и может сильно отличаться от классической компьютерной программы. Если вы действительно хотите быть независимым от любого микроконтроллера и любой платформы, вы все равно можете использовать строки в стиле C с char *, указывающим на массив символов.
  2. Делать то, что вы хотели бы сделать, совсем непросто. Прежде всего вам понадобится исходный код вашей библиотеки std::string. Выполнение #include <string> недостаточно: вы также должны скомпилировать библиотеку строк для платформы AVR.
  3. Существуют некоторые «ограничения» в том, как Arduino обрабатывает код C ++ по сравнению с классической компьютерной программой: например, операторы 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...