12 votes

Comment combiner les chaînes de caractères C++ et les chaînes de caractères Arduino ?

J'ai écrit une bibliothèque pour mon projet (pour l'instant, j'utilise Arduino). Le problème que je rencontre est le suivant string en C++ et en Arduino diffèrent.

C'est-à-dire que j'aimerais que ma bibliothèque soit indépendante d'Arduino, et j'utilise donc #include <string> et déclarant ensuite string s; . Cependant, dans Arduino, les chaînes sont définies par Arduino et déclarées. String s2 .

Lorsque j'inclus ma bibliothèque dans le sketch, j'obtiens error: string: No such file or directory sur la ligne où j'essaie d'inclure la bibliothèque C++ string ( #include <string> ).

Existe-t-il un moyen de faire en sorte que l'Arduino utilise la bibliothèque de chaînes C++, ou de convertir les chaînes en chaînes Arduino lors de la compilation ?

11voto

Vincent Hiribarren Points 1333

Plusieurs choses :

  1. Je ne suis pas sûr de la raison pour laquelle vous voulez faire quelque chose d'indépendant d'Arduino. Habituellement, la programmation d'un microcontrôleur n'est pas quelque chose de très modulable et peut être très différente d'un programme informatique classique. Si vous voulez vraiment être indépendant de n'importe quel micro-contrôleur et de n'importe quelle plateforme, vous pouvez toujours utiliser des chaînes de caractères de style C, avec une balise char * pointant vers un tableau de caractères.
  2. Faire ce que l'on aimerait faire n'est pas du tout facile. Tout d'abord, vous aurez besoin du code source de votre std::string bibliothèque. Faire un #include <string> n'est pas suffisant : vous devez également compiler la bibliothèque string pour la plateforme AVR.
  3. Il y a quelques "limitations" dans la façon dont Arduino traite le code C++ par rapport à un programme informatique classique : par exemple, les opérateurs new y delete ne sont pas mises en œuvre. En outre, d'autres éléments peuvent être nécessaires à la std::string donc beaucoup de dépendances à gérer, ou une taille de code source trop importante pour Arduino.

Il existe quelques implémentations d'outils classiques de chaînes de caractères pour les microcontrôleurs AVR comme Arduino, mais elles sont réalisées de manière procédurale (et non orientée objet) pour les chaînes de caractères de type C. Par exemple, pour la avr-libc fournie avec avr-gcc, vous pouvez voir la liste des fonctions ici : avr-libc string.h Vous avez même le bon vieux printf : avr-libc stdio.h

Il est possible de les utiliser avec Arduino si vous ajoutez les bons fichiers d'en-tête dans votre code, mais attention à la taille de votre code ! Il suffit d'utiliser printf peut augmenter la taille de plusieurs kilo-octets, ce qui peut être énorme pour un microcontrôleur en fonction de vos besoins.

Pour conclure, à mon avis, la seule façon portable serait d'utiliser un fichier de type char * chaîne, http://arduino.cc/en/Reference/String

2voto

drmpf Points 31

La nouvelle bibliothèque SafeString Arduino (disponible dans le gestionnaire de bibliothèques) vous permet d'utiliser des opérations de type "chaîne de caractères" sans utiliser les fonctions new/delete. Un tutoriel détaillé est disponible à l'adresse https://www.forward.com.au/pfod/ArduinoProgramming/SafeString/index.html

Bien que la bibliothèque utilise des interfaces Arduino comme Print et Stream. Il est facile de les supprimer et de faire de la bibliothèque une bibliothèque C++ "standard", indépendante d'Arduino.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X