Question

Suivi de ce commentaire de la question Écriture du micrologiciel: assemblage ou niveau supérieur? :

Lors de la compilation du code C ++ pour la plate-forme Arduino , pouvez-vous utiliser des fonctions virtuelles, des exceptions, etc.? Ou voudriez-vous (devoir) utiliser un sous-ensemble de C ++ (comme décrit dans le commentaire )?

D'autres problèmes lors de la programmation pour la plate-forme Arduino?

Était-ce utile?

La solution

L’environnement Arduino utilise la version AVR de la chaîne d’outils GCC. Le code est compilé en C ++, vous pouvez donc utiliser des classes. Les fonctions virtuelles sont possibles. les vtables seront stockés dans la section .data et auront les adresses correctes. En fait, la classe de base Print utilise des fonctions virtuelles pour adapter les différentes options "print". méthodes aux différents types de sortie.

Les exceptions ne sont pas prises en charge pour des raisons d'espace de code. L’environnement Arduino passe " -fno-exceptions " en ligne de commande du compilateur. Voir la source pour la vérification de cette source. .

Les modèles sont pris en charge. Par exemple, cette technique d'opérateur d'insertion de flux sans coût fonctionne correctement à l'aide d'un modèle simple et d'un opérateur en ligne.

Autres conseils

Le logiciel Arduino utilise avr-gcc pour compiler des esquisses. Les limitations suivantes proviennent de la FAQ sur avrlibc (puis-je utiliser le C ++ sur l'AVR?) :

pris en charge

  • Fonctions virtuelles
  • Constructeurs et destructeurs (y compris globaux)

Non pris en charge

  • Fonctions standard, classes et modèles de classes C ++ (mais consultez ce portage de uClibc ++ pour Arduino )
  • opérateurs new et delete (si vous essayez de les utiliser, l'éditeur de liens se plaindra des références externes non définies). Cela signifie que les objets ne peuvent être créés que sur la pile. Si une allocation dynamique de mémoire est requise, elle doit être implémentée avec malloc () et free () de types C
  • Exceptions. Comme les exceptions sont activées par défaut dans l'interface C ++, elles doivent être explicitement désactivées à l'aide de -fno-exceptions dans les options du compilateur. Ceci est fait automatiquement par l'IDE Arduino quand il lance avr-gcc

Autres problèmes

  • Certains des fichiers inclus fournis ne sont pas sûrs pour C ++, c’est-à-dire qu’ils doivent être enveloppés avec
    extern " C " {. . . }

La convivialité d'une fonctionnalité n'est pas limitée par la plate-forme mais par le compilateur que vous utilisez.

Je consulterais la documentation de votre compilateur pour connaître les fonctionnalités de langage prises en charge.

l'informatique Comeau dispose d'un compilateur C ++ to C qui prend en charge toutes les fonctionnalités C ++. Pas seulement des fonctions virtuelles, ou des exceptions, mais aussi des exportations. Vous devez appeler Comeau pour qu’il cible la langue Arduino, mais cela ne devrait pas être trop difficile.

La documentation indique:

  

Le langage Arduino est basé sur C / C ++ et prend en charge toutes les constructions C standard et certaines fonctionnalités C ++.

Cela ne dit rien sur les fonctions virtuelles que je peux trouver.

J'ai essayé un programme simple et il compile bien. Je ne l'ai pas encore testé sur du matériel Arduino.

EDIT: Je n'ai pas non plus testé d'exceptions.

J'ai utilisé g ++ avec ce Makefile et commencé par ce code . C ++ perd de l'espace. Mais les protothreads sont trop cool pour ne pas les utiliser.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top