7
votes

Microcontrôleurs utilisant c ou c ++

Dupliqué possible:
y a-t-il une raison d'utiliser C au lieu de C ++ pour le développement intégré?

Je suis très curieux de ce sujet: pourquoi est-ce que lorsque nous traitons avec des microcontrôleurs, ils préfèrent c au lieu de C ++? Sur la base de mes recherches, C et la langue de montage sont la langue de programmation habituelle pour ces appareils. Je sais seulement C ++ et le langage de montage. Donc, dans ce cas, devrais-je commencer à apprendre C ou coller avec la langue d'assemblage et, dans l'affirmative, quel compilateur dois-je utiliser parce que je connais seulement le turbo assembleur.

Merci et plus de puissance! :)


1 commentaires

Je suppose que c'est parce que c est autour plus longtemps et est une langue plus simple que c ++. Mais c'est une question juste en question pourquoi les microcontrôleurs ne sont pas, en général, de soutenir C ++.


6 Réponses :


11
votes

Certaines fonctionnalités C ++ telles que des exceptions et des fonctions virtuelles peuvent ajouter des frais généraux à votre programme qui n'est pas souhaitable dans des environnements fortement contraints de ressources. Cela réduit la demande de compilateurs C ++ sur de telles plates-formes. Il est également beaucoup plus difficile d'implémenter un compilateur C ++ qu'un compilateur C. Cette difficulté que le manque de demande le rend tellement de micro-contrôleurs n'a que C compilateurs C disponibles pour eux.

J'apprendrais c pour votre programmation de micro-contrôleur. Il n'est pas difficile d'apprendre C après avoir appris C ++ et sera beaucoup plus facile à coder que l'assemblage.


0 commentaires

4
votes

C'est simplement un accident historique et une pratique (par des luddites anciens comme moi) que les ucontrollers "préfèrent" ASM et C. Si votre compilateur peut compiler C ++ dans le code UController, il n'y a pas de raison théorique que je sais pourquoi vous ne devez pas Utilisez C ++.

Pour moi, il est beaucoup plus facile et plus naturel d'utiliser ASM et C, mais vous pouvez utiliser ce que vous préférez aussi longtemps que votre compilateur (et votre lieur, si vous l'utilisez) peut faire la bonne chose; et votre ucontroller a suffisamment de mémoire pour accueillir le code C ++ compilé (peut-être plus grand).


0 commentaires

3
votes

C est plus bas niveau et fait exactement ce que vous dites. Il est plus adapté aux environnements à basse ressources telles que les micro-contrôleurs.

C ++ comporte certaines fonctionnalités nécessitant des ressources supplémentaires (telles que OOP, exception, etc.).

De plus, le micro-contrôleur n'a pas les mêmes caractéristiques que la CPU de votre ordinateur. Il pourrait par exemple ne pas prendre en charge la chargement de la bibliothèque dynamique et même pour les bibliothèques statiques que vous êtes limité que votre puce n'a pas beaucoup de mémoire.

Habituellement, les micro-contrôleurs exposent une bibliothèque d'entrée / sortie spéciale, et le stdlib n'est pas toujours disponible.

Ce dont vous avez besoin est un compilateur croisé pour votre micro-contrôleur spécifiquement. Ensuite, vous pouvez écrire votre programme en C et ASM.

Si la puce la prend en charge, vous pouvez ré-compiler le STDLIB pour utiliser les fonctionnalités C standard C, puis vous pouvez éventuellement (à nouveau si la puce dispose de suffisamment de ressources) Construire un compilateur croisé C ++, puis la STL. Ensuite, vous pourrez créer un programme C ++ sur votre puce, mais le programme presse beaucoup plus que le programme C d'origine C.


3 commentaires

Donc, il y a une puce qui prend en charge C ++? sont-ils les habituels? ou les rares? Est-il bon d'apprendre C ++ car il est bien structuré? ou juste aller pour le spagyty c?


@deadmann Il ne s'agit pas de supporter C ou C ++, il vous suffit de besoin d'un compilateur capable de produire du code binaire compatible avec votre puce. C ++ ajoute des frais généraux qui augmente votre taille binaire et potentiellement le temps de calcul de certaines fonctionnalités, c'est pourquoi la prise en charge de C ++ est généralement limitée dans les compilateurs ciblant les ucontrols. Si je me souviens bien, l'environnement Arduino par défaut prend en charge C ++.


tout bon tutoriel?



2
votes

Les microcontrôleurs sont des unités de traitement de la mémoire et de la bande passante. C Langage de programmation génère un code serré proche de la langue d'assemblage en termes de taille et de vitesse. C ++ porte généralement une augmentation de la mémoire et de la vitesse. Une autre question est la répartition de la mémoire dynamique. L'utilisation de la conception orientée objet avec C ++ implique généralement de créer et de détruire de manière dynamique des objets. Applications intégrées à l'aide de microcontrôleurs, allouez généralement toute la mémoire requise statiquement et n'est pas libérée pour la durée de vie de l'application.

Cela étant dit, si vous utilisez un microcontrôleur 32 bits et que votre application est suffisamment complexe qu'elle gère beaucoup de trafic de données ou une interface utilisateur significative via l'écran tactile / LCD, etc., C ++ (et parfois même c #) est la langue de choix.

Le compilateur que vous choisissez dépendrait du microcontrôleur, vérifiez le site Web du fournisseur de microcontrôleur pour la suite d'outils de développement appropriés à utiliser.

Le langage d'assemblage n'est utilisé que pour les couches les plus basses si elle ne peut pas être faite dans C. Il est plus difficile de gérer et de conserver le code de langue d'assemblage de ports, il est donc préférable de minimiser son utilisation dans votre application.


0 commentaires

2
votes

Les microcontrôleurs sont de petits appareils qui ne sont pas très puissants par rapport aux ordinateurs. Ils ont des ressources limitées. Premièrement, la taille de la pile est très limitée, il n'est donc pas recommandé d'avoir de nombreux appels de fonction imbriqués (sur certains périphériques, la pile est limitée à quelques octets). Deuxièmement, il n'est souvent pas possible d'allouer de manière dynamique la mémoire (Alloc, gratuit ...), et la plupart des données de programme doivent être des variables statiques globales ou stockées dans la pile, des classes de pile, telles que std :: vecteur < / code> ne serait pas disponible.

Même si les compilateurs C ++ pourraient être utilisés pour les microcontrôleurs, il ne serait pas très utile car les faibles capacités de ces dispositifs interdiraient l'utilisation claire de ce langage puissant. L'utilisation de C est souvent plus facile pour des tâches simples et des microcontrôleurs sont dimensionnés pour des tâches simples.


0 commentaires

4
votes

C'est juste la disponibilité des ressources, comme expliqué par les autres affiches. Au moment où vous vous êtes compilé dans quelques tables de méthode virtuelle et à quelques dizaines de pointeurs d'objets, c'est tout ce que la RAM est passée d'un simple UC!

Cela dit, je préfère C ++ sur les contrôleurs de 32 bits d'aujourd'hui avec 8K de RAM, beaucoup de flash, de périphériques embarqués complexes et de libs multitâches. Après des décennies d'OO, l'utilisation de CLAIR C est cauchemarish pour quelque chose de non trivial.

J'utilise actuellement les chips NXP Bras et Rowley Crossworks (IDE, utilise GCC). Je n'utilise que c pour les interfaces et assembleur de lib liber pour certains pilotes, tout le reste est C ++.


0 commentaires