C ++ contre le langage Arduino?

Quels sont les avantages de chaque langue lors de lutilisation de lArduino?

Je pense que cest une bonne question générale, mais je « Jajouterai un peu pourquoi je » demande si quelquun veut me donner un conseil.

Je suis expérimenté dans les langages pré-traités comme JavaScript, PHP, et ai joué avec des langages comme Java et Visual Basic. En dautres termes, je connais les techniques de programmation et lorientation objet classique et prototypique, mais rien sur la communication directe avec le matériel.

Je fabrique un octocoptère, et je pense quune approche orientée objet sera la plus simple. (Le logiciel aura de très nombreuses fonctionnalités …) Cependant je nai jamais écrit en C ++.

Puisquil sagit dun Q & Un site qui est supposé pour aider les autres, seule la question générale présentée au début a beaucoup dimportance, mais japprécierais tout commentaire sur ma situation.

Commentaires

  • Évitez Arduino IDE car il ne mérite pas son nom IDE, cest même un éditeur très médiocre: il peut être bon pour les débutants et les croquis simples mais il faut rapidement aller vers quelque chose de mieux.
  • Voici une ventilation assez succincte de ce que lon entend par (et de ce que ‘ est réellement sous le capot de)  » Programmation Arduino Langue.  »
  • C++ vs. The Arduino Language? – Le  » Langue Arduino  » est C ++. Il y a un peu de prétraitement pour vous éviter de faire des prototypes de fonctions, mais cest très certainement C ++.
  • Le langage Arduino nexiste pas. Cest simplement une bibliothèque.
  • Pas tellement lié à la question quaux commentaires: Atmel studio est gratuit et à mon humble avis, il vaut mieux que Visual Studio pour la programmation arduino. Prend également en charge le plugin Visual Micro, bien quil ne soit pas du tout nécessaire pour la programmation et le débogage des arduinos.

Answer

Mon expérience personnelle en tant que professeur (programmation, mécatronique) est que si vous avez une expérience de programmation préalable et que vous connaissez des concepts tels que la POO, il vaut mieux opter pour le C / C ++. Le langage arduino est vraiment idéal pour les débutants, mais présente certaines limitations (par exemple, vous devez avoir tous vos fichiers dans le même dossier). Et cest fondamentalement une simplification de C / C ++ (vous pouvez pratiquement copier & coller du code arduino dans un fichier C / C ++, et cela fonctionnera). Il est également logique que vous puissiez utiliser un IDE bien connu sous le nom déclipse:

http://playground.arduino.cc/Code/Eclipse

Au départ, il est nécessaire un peu plus de configuration et de configuration de votre environnement de développement, mais à mon humble avis, cela en vaut la peine pour les programmeurs ayant de lexpérience dans une autre langue.

Dans tout Dans ce cas, cela ne vous fera pas de mal de commencer à utiliser le langage arduino et lIDE arduino pendant quelques jours pour vous familiariser avec le matériel arduino, puis de passer en C / C ++ avec Eclipse pour vraiment développer votre projet.

Commentaires

  • Merci pour vos pensées. Je ‘ utiliserai lIDE Arduino pour apprendre à contrôler tous les différents matériels des éléments comme des capteurs et des écrans LCD, etc. Ensuite, je ‘ passer au C ++ pour créer le logiciel de loctocoptère. Connaissez-vous un bon et court livre pour les personnes qui connaissent dautres langues? Le  » problème  » avec de nombreux les livres que jai ‘ trouvés sont-ils si nombreux que je nai ‘ pas besoin parce que ‘ m sur un petit microcontrôleur Atmel plutôt que sur un ordinateur à interface utilisateur.
  • Il y a un joli livre  » Programmation C pour Arduino  » par par Julien Bayle ce qui est utile. Ce nest pas un langage C ++ mais cela devrait vous aider à en comprendre les bases.
  • Cest une bonne demande: un petit et bon livre avec les bases du C ++ pour les programmeurs dautres langages. Désolé, je ne peux donner aucune recommandation, je nen connais aucune bonne. En fait, jai écrit un livre, avec une orientation pratique (développer un jeu vidéo) pour mes élèves, mais ce nest quen espagnol. Pour un bon livre C ++ pratique, je recommanderais Deitel & Deitel Comment programmer C ++, vous pouvez ignorer de nombreux chapitres avancés.
  • C ++ prend en charge les fonctionnalités OO, le langage C non.
  • @FriendofKim Pas exactement ce que je voulais dire (bien que techniquement vous puissiez, le Due est assez rapide pour prendre en charge une solution logicielle pour la communication série non mégabit, et il a 5 U (S) ARTS au total alors que les bibliothèques Arduino nen fournissent que 4 mais iirc la carte Due ne fournit de toute façon pas de broches pour lun des USART); les bibliothèques Arduino configurent les USART pour utiliser le mode asynchrone, mais javais besoin de synchrone jusquà 6 Mbps (et jai dû utiliser le mode SPI car lentrée devait être traitée comme un bitstream brut donc pas de bits darrêt / etc.), qui impliquait également de modifier la configuration du contrôleur PIO par défaut.

Answer

En théorie …
Il ny a pas vraiment de langage Arduino en tant que tel. Cest vraiment juste du C ++ avec quelques bibliothèques spécifiques au domaine. Celles-ci ajoutent diverses fonctionnalités, telles que des fonctions que vous pouvez appeler pour contrôler le matériel. Si vous navez pas ces fonctions, vous devez jouer directement avec des registres spéciaux pour tout contrôler. Cest ainsi que la programmation intégrée est généralement effectuée. Cest rapide, mais cela peut être assez difficile à apprendre et à comprendre.

En plus des fonctions, les bibliothèques ajoutent des noms alternatifs pour certains types. Par exemple, boolean et byte ne sont pas dans la norme C ++. Cependant, ils sont directement équivalents à bool et unsigned char.

Tout cela signifie que vous pouvez probablement effectuer un portage général Code C ++ directement sur Arduino sans difficulté. Cependant, revenir en arrière peut nécessiter quelques modifications mineures.

En pratique …
Cela dit, la programmation pour Arduino nest pas exactement la même chose que la programmation générale C ++. De nombreuses différences sont communes à toute la programmation embarquée (comme la mémoire limitée et la puissance de traitement).

Il est également intéressant de noter que si vous utilisez lIDE officiel Arduino, il existe toutes sortes de bizarreries et de limitations ennuyeuses sur la façon dont vous configurez votre code. Il existe des solutions de contournement dans tous les cas (pour autant que je sache) mais ils sont parfois assez frustrants.

Pour une flexibilité totale, utilisez un IDE tiers (comme Eclipse) avec un plug-in pour prendre en charge Arduino. Cela devrait vous donner tous les avantages du C ++, ainsi que les bibliothèques Arduino.

Commentaires

Réponse

Quels sont les avantages du C ++ par rapport au langage Arduino lors de lutilisation dArduino? Jai de lexpérience dans les langages prétraités comme JavaScript, PHP, et jai manipulé des langages comme Java et Visual Basic.

Premièrement, le compilateur / IDE Arduino accepte C et C ++ tels quels. En fait, la plupart des bibliothèques sont écrites en C ++. Une grande partie du système sous-jacent nest pas orientée objet, mais cela pourrait lêtre.

Ainsi, «Le langage arduino» est C ++ ou C.

Le C ++ nest pas ramassé. Il gère les variables dans la portée – si vous écrivez:

int led = 13; void blinkTimes(int value) { int i; for(i=0;i<value;i++) { digitalWrite(led, HIGH); delay(1000); digitalWrite(led, LOW); delay(1000); } } 

Alors vous « trouverez que led et i ne poussent pas ou ne fuient pas, peu importe le nombre de fois que vous appelez blinkTimes.

Si i était une classe, elle serait supprimée de la même manière une fois la fonction terminée. Donc, tant que vous nutilisez pas new ou des fonctions dallocation de mémoire similaires pour créer de nouveaux objets, alors vous naurez pas à vous soucier des fuites.

Vous risquez toujours de manquer de mémoire, si vous créez classes énormes et en utilisent beaucoup dans des fonctions profondément imbriquées, mais en général, vous n’allez pas avoir de problèmes tant que vous n’avez pas commencé à traiter new et free fonctions.

Si vous utilisez new, vous « devrez appeler delete aux moments appropriés. C ++, et par extension Arduino, na pas de ramasse-miettes automatique, vous devez gérer explicitement votre propre mémoire.

Commentaires

  • Daccord, si les objets instanciés (avec new) aren ‘ t garbage collecté, je ‘ devra apprendre cela aussi. Je suppose que nimporte quel livre sur C ++ couvrira cela. Merci pour une bonne réponse!

Réponse

— Mise à jour 170412
Jai écrit mon original réponse il y a trois ans du point de vue de lexistence dun « Arduino C ++ » distinct. Le langage utilisé dans lEDI est C ++ standard, car il est implémenté par le compilateur GNU C ++. Des différences « apparentes » sinsinuent parce que lEDI effectuera un pré-traitement pour aider les nouveaux arrivants dans la langue à éviter quelques « gotcha », en remplissant quelques #includes, f / ex. Mais vous pouvez – et je le fais – y écrire du C ++ correct et obtenir exactement ce que vous attendez.
— fin de la mise à jour

Limitez votre utilisation des fonctionnalités du langage C ++ à ceux dont limplémentation vous entièrement compris. Certaines fonctionnalités se compilent en un code plus gourmand en ressources quil ne ressort de la lecture du code source. La liste .lss (source et assembly fusionnés) éventuellement générée peut vous donner un bon aperçu de ce que le compilateur C ++ faisait lorsque vous ne cherchiez pas.

À votre question sur la mémoire: C ++ ne fait pas de ramasse-miettes. Les langages basés sur la pile comme C et C ++ allouent un stockage temporaire sur la pile pour les variables automatiques à lentrée de la fonction, qui sont ensuite libérées lorsque la fonction retourne, mais ce nest pas un vrai garbage collection. Les objets créés en mémoire globale ou en tas sont actifs jusquà ce que vous les supprimiez explicitement. Assurez-vous de savoir où, quand et pendant combien de temps les différents types dobjets seront créés. Vous ne voulez vraiment pas que votre code new -ing et delete -ing objets bon gré mal gré. Ils seront construits dans la mémoire du tas, le fragmenter et le faire grandir dans la pile. Cest à ce moment que votre code – et votre gentil « copter – va planter.

C fait moins pour vous donc il peut faire moins à vous. Ce nest pas un mauvais choix. C avec quelques fonctionnalités de C ++ peut être un choix encore meilleur, étant donné que vous choisissez judicieusement les fonctionnalités supplémentaires. C ++, si ce sont vos deux choix:

[Réponse originale] – C ++ est un langage standardisé Il est largement déployé dans de nombreux environnements, y compris les systèmes embarqués et est donc testé de manière plus approfondie que le langage très similaire à C ++ quest «Arduino». Ceci est particulièrement important pour les applications critiques / critiques pour la sécurité telles que vous planifiez. Un code écrasé signifie un « hélicoptère » en panne et même sil ne fait pas de mal à quelquun, il cassera votre machine coûteuse.

  • Étant standard, C ++ est portable. Besoin de mettre à niveau votre processeur? Tout sauf le code spécifique au silicium portera sur le nouveau. Besoin de changer votre ensemble doutils, système de développement, OS hôte? C ++ sera pris en charge partout. Bien que lIDE Arduino fonctionnera partout où Java est pris en charge, cest le seul outil qui utilise Arduino C ++ et il est également très limité l. Si vous souhaitez utiliser Eclipse, les outils AVR, marcher pieds nus sur la ligne de commande, développer dans Emacs, ou tout autre environnement que vous préférez, le C ++ standard sera pris en charge.

  • LIDE Arduino fait des choses derrière votre dos – en particulier, il #inclut les fichiers .h quand il pense que vous en avez besoin. Même si cest correct, vous voulez vraiment écrire, ou au moins voir et comprendre, tout ce que le compilateur va voir. Les langages de programmation ne sont pas faits pour les ordinateurs (les ordinateurs mangent des morceaux pour le petit-déjeuner); ils sont faits pour les gens, en particulier les personnes qui vous suivent sur le projet, dont le plus important est peut-être … vous !, quand 6 mois après vous avez écrit un module, vous devez revenir pour laméliorer, ou plus probablement, le corriger. Vous voulez vraiment pouvoir voir tout ce que le compilateur voit.

Commentaires

  • Cest VRAIMENT une bonne réponse . Il semble clair que vous aimez le C ++ et que je devrais laimer aussi! … Mais sérieusement, je ‘ sauterai directement sur C ++ dès que je ‘ compris comment le  » communication  » avec les différents capteurs, etc. fonctionne.
  • Connaissez-vous de bons livres sur le sujet? (Convient pour moi qui programme depuis des années dans dautres langages et qui na besoin que de la  » partie intégrée  » de C ++.)
  • Pensez-vous que Accelerated C ++ est un bon livre pour cela?
  • Jaimerais pouvoir vous aider avec le ‘ droit ‘ livre, mais je suis arrivé au C ++ avec beaucoup de C derrière moi et Kernighan & Ritchie ‘ s Le langage de programmation C est toujours mon livre de référence (mauvais jeu de mots) pour tout ce qui nest pas explicitement C ++, et Ellis & Stroustrup ‘ s Le manuel de référence C ++ annoté pour C ++. Mais pour écrire sur du matériel, vous ‘ ferait bien de regarder certaines des bibliothèques de périphériques fournies par les utilisateurs sur Arduino.cc . Commencez par peaufiner les ports dE / S avec les fonctions pinMode (), digitalWrite () et digitalRead (), puis leurs équivalents dentrées / sorties analogiques, et finalement, …
  • … prévoyez décrire directement dans Registres dE / S pour lamélioration de la vitesse et de lespace mémoire. Des programmes comme blinky.cpp et hello.cpp sont de bons endroits pour commencer à jouer avec le matériel. Ajoutez un multimètre simple et quelques LED avec les bonnes résistances de limitation de courant soudées en permanence à une jambe et vous devriez être en mesure de voir les résultats réels, même sils sont simples, de vos efforts. Après cela, lisez les fiches techniques de tout matériel qui vous intéresse pour savoir quels signaux vous pouvez lire / y écrire pour les faire jouer. Les capteurs de température sont faciles à utiliser et ‘ t tout le monde na-t-il pas besoin dun enregistreur de réfrigérateur? Amusez-vous bien!

Réponse

Le langage Arduino est C ++, mais cest très différent de la plupart des variétés C ++.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *