Je suis un étudiant en génie électronique et des communications, avant d'arriver à l'université, je me suis intéressé à la programmation et aux applications informatiques. Je m'étais concentré sur la conception d'applications Windows et l'apprentissage de ses techniques, mais maintenant, je pense que cela est inutile dans mon domaine ... Je n'ai pas à tout apprendre sur l'informatique et le développement de logiciels! (Ai-je raison à ce sujet?)
Je connais VB .Net, C # et C ++. J'ai beaucoup de temps dans mes vacances donc je veux approfondir par programmation dans le "domaine électronique". Alors, que recommanderiez-vous d'apprendre ou de vous concentrer?
Je veux que ces langages soient utilisés dans la programmation des microcontrôleurs et autres circuits intégrés. Le C ++ est-il suffisant ou je devrais également maîtriser le C? Dites-moi vos pensées s'il vous plaît.
la source
Réponses:
Oui, c'est presque certainement une bonne chose pour apprendre à utiliser le C aussi bien que possible (C ++ vous donnera un point de départ utile, bien que gauche , il y aura encore beaucoup de choses à ramasser, en particulier les différences entre le codage pour les petits systèmes embarqués par rapport à l'écriture pour quelque chose comme Windows) étant donné son ubiquité.
La plupart des microcontrôleurs en dessous d'une certaine taille (par exemple PIC, AVR, MSP430, etc.) utilisent C (ou assembleur) car il existe de nombreuses versions de haute qualité (gratuites et $$ - par exemple, de nombreux compilateurs commerciaux sont basés sur le compilateur GCC gratuit) Compilateurs C disponibles .
Vous obtenez d'autres langues comme l'excellent JAL pour PIC (l'auteur original Wouter Van Ooijen qui est membre ici), PICBASIC, les variantes Ada, mais en raison de sa popularité et du nombre de compilateurs disponibles, je dirais que C est la langue de choix pour la plupart. Bien que cela ne signifie certainement pas que c'est la meilleure langue, l'utilisation de la langue la plus populaire présente des avantages évidents (documentation, support, portabilité, collaboration, etc.)
Pour les micros 32 bits plus complexes et plus grands comme de nombreuses variantes ARM, il existe également C ++ et autres compilateurs disponibles.
Je sauterais directement dedans et saisirais quelques conseils de développement et obtiendrais le codage. Vous pouvez choisir un micro 8 bits bas de gamme comme le PIC16F (de nombreux kits de démarrage sur Microchip Direct)
Un micro 16 bits milieu de gamme comme le PIC24, et également un ARM linux C / C ++ / embarqué d'une certaine sorte - le STM32F4 ARM Cortex M4 Discovery est une carte de développement très bon marché qui pourrait valoir la peine d'être saisie.
Du côté de la logique programmable et du langage de description matérielle (HDL - les deux grands sont Verilog et VHDL), il peut également être utile de se procurer une carte de développement FPGA ou CPLD de Diglent ou similaire.
Si vous ne voulez pas attendre une carte de développement, vous pouvez télécharger MPLAB ou MPLABX et utiliser l'excellent simulateur pour vous essayer au développement PIC. Il en va de même pour d'autres outils, par exemple, vous pouvez télécharger Xilinx ISE Webpack gratuitement et essayer des HDL et une conception de logique programmable.
la source
Apprenez C et obtenez une carte de développement de microcontrôleur bon marché, comme un MSP430 ou ARM Cortex, et au moins écrivez et chargez quelques programmes C.
J'ai un diplôme en informatique et une formation en développement de logiciels, principalement en programmation C ++ pour les jeux et maintenant des jeux et applications iOS, mais mon dernier travail était un concert semi-pro EE qui a commencé par faire un tas de programmation de firmware pour un système ARM Cortex M3 , puis j'ai fini par apprendre à faire une conception de circuit de base et une disposition de carte et à concevoir quelques cartes simples. J'ai donc dû essentiellement faire face au problème de l'utilisation du meilleur langage de programmation pour faire le pont entre la conception matérielle et logicielle en tant que responsable des deux extrémités.
C est absolument la langue que vous devez connaître. C'est facile pour les gens qui programment en C ++ et n'ont jamais vraiment à se limiter à l'ensemble de fonctionnalités de C pour dire "c'est la même chose" mais ce n'est pas le cas. Surtout la façon dont C ++ a évolué et rassemblé les fonctionnalités, et la façon dont les programmeurs C ++ traditionnels utilisent ces fonctionnalités, c'est vraiment très différent de travailler sur une application C assez grande par opposition à une application C ++. Votre SDK de firmware sera un tas de bibliothèques C, tout ce qui s'adaptera à un MCU sera une bibliothèque C, tout OS qui a du sens sur un MCU sera écrit en C, etc. etc.
Cela dit, puisque la plupart des chaînes d'outils MCU finissent par utiliser GCC comme compilateur, vous aurez presque certainement un compilateur C ++ disponible si vous utilisez une famille MCU décente. Mais vous devez faire très attention aux fonctionnalités que vous utilisez, en particulier les éléments de la bibliothèque standard, car il est très facile de se retrouver avec un binaire beaucoup trop gros pour tenir sur votre appareil. Je pense qu'il y a de bonnes raisons d'être en faveur de l'utilisation de C ++ sur les appareils intégrés, C ++ a quelques fonctionnalités intéressantes qui ont une litière ou aucune pénalité de taille ou de vitesse, il vous suffit de savoir ce que vous faites et d'écrire du code de cette manière plus loin sur l'extrémité de style C du spectre que l'extrémité STL du spectre en termes d'utilisation intelligente des fonctionnalités.
Ne faites pas trop attention aux gens qui disent que vous pouvez utiliser Lua ou Python sur un MCU avec le bon interprète intégré bla, bla. C'est vrai, je l'ai fait et c'est amusant, mais pour le moment c'est plus pour des projets de jouets et des trucs qui apparaissent sur Hack a Day. Je pense que nous verrons plus de ce genre de chose car la loi de Moore est appliquée sans relâche même aux plus petits processeurs, c'est quelque chose qui s'est produit avec des jeux où il y avait beaucoup d'assemblage, puis ils ont tenu plus longtemps avec C et C ++ que tout le monde, et maintenant tout est si rapide, et la productivité des développeurs est si importante que beaucoup de développement se fait avec des langages de haut niveau intégrés ou dans un langage de haut niveau. Même ainsi, il faudra quelques années avant de voir des entreprises embaucher des programmeurs de firmware avec des antécédents Python et Lua.
Ne passez pas trop de temps à l'assemblage non plus. Ce n'est pas mal de se familiariser avec les concepts, mais il est peu probable que vous vous retrouviez à faire beaucoup, voire aucune programmation d'assemblage. Il y a comme cette sagesse conventionnelle avec des jeux et embarqués que c'est un assemblage «bon à savoir», souvent répété par des gens qui ne travaillent pas réellement dans ces domaines. Mais en réalité, il est très peu probable que vous écriviez un assemblage, et si vous le faites, ce ne sera probablement que quelques lignes d'optimisation ou quelque chose avec le matériel pour lequel vous n'avez tout simplement pas d'API (mais vous après avoir écrit celui qui encapsule quelques lignes d'assemblage). J'ai travaillé sur plusieurs jeux et ce projet de conception de cartes / micrologiciels et le nombre total de lignes d'assemblage que j'ai écrites pour des projets commerciaux est probablement à l'adolescence. Il'
la source
asm()
), bien intégrées dans votre code C. C'est une combinaison gagnante à tous points de vue. Niveau élevé mais compact avec des plongeons occasionnels dans l'assemblage lorsque, par exemple, le timing doit être juste. Laavr-gcc
chaîne d'outils le fait déjà beaucoup avec les macros C, donc vous ne le remarquerez jamais.Je suis d'accord avec tout le monde que vous devez être très compétent en C.
Je recommanderais également d'apprendre au moins un langage d'assemblage. Faire cela vous fera un bien meilleur programmeur C. Vous devez savoir ce qui se passe sous le capot, et cela est beaucoup plus vrai dans le monde embarqué que dans le monde PC.
Comprendre l'assembleur que votre C génère vous permettra d'écrire un C plus optimal en termes de vitesse et de compacité. Un code plus rapide signifie:
Un code plus compact signifie que vous pouvez utiliser un MCU moins cher avec moins de mémoire. Ou avez de la place pour plus de fonctionnalités.
L'autre langue que vous pourriez envisager d'apprendre est Verilog . Il s'agit d'un langage de description du matériel, et il est vraiment très différent du C, non seulement dans son apparence, mais aussi dans ses fonctionnalités. Verilog ouvrira la voie à l' exploitation de puces très puissantes comme les Cypress PSoC3 et 5 . C'est un microcontrôleur avec du matériel reprogrammable analogique et numérique, qui vous permet de faire des choses incroyables qui sont très difficiles à faire avec n'importe quel autre MCU. Vous pourrez également faire la conception FPGA .
la source
En tant que MSEE qui travaille dans l'industrie de la défense depuis 8 ans, je peux vous dire que comprendre comment bien programmer dans LabVIEW (un langage de flux de données graphique et typé) signifie que vous ne serez jamais à court de travail.
LabVIEW a commencé comme un langage de programmation pour les ingénieurs hardware, vous pouvez le voir dans le fait que le code ressemble beaucoup à un schéma de circuit. Cependant, au cours des 25 dernières années, LabVIEW est devenu un langage à part entière riche en fonctionnalités prenant en charge l'orientation d'objet et le multithread. En fait, je dirais qu'il n'y a pas d'autre langage de programmation, basé sur du texte ou autre, qui soit plus facile à programmer une application multithread que LabVIEW; ceci est en grande partie dû à son paradigme de flux de données. Alors que le nombre de cœurs de CPU continue d'augmenter, LabVIEW deviendra de plus en plus pertinent en tant que langage à usage général.
Un autre avantage de la connaissance de LabVIEW est que vous n'êtes qu'à un jet de pierre de la programmation des FPGA à l'aide du module LabVIEW FPGA qui prend votre code LabVIEW et le convertit en VHDL dans les coulisses avant de le transmettre au compilateur Xilinx. Vous pouvez également utiliser vos compétences LabVIEW pour passer à la programmation de code en temps réel via le module LabVIEW en temps réel qui utilise VxWorks ou Phar Lap.
Remarque: je suis un développeur LabVIEW certifié.
la source
Si vous voulez faire de la programmation de bas niveau de microcontrôleurs, alors vous devriez être à l'aise avec la programmation en langage assembleur (plus les architectures sont différentes, mieux c'est), et oui, vous utiliserez C beaucoup plus que vous n'utilisez C ++.
Pour les travaux d'ingénierie générale, des langages mathématiques tels que Matlab (également Scilab et GNU Octave) seront couramment utilisés pour la modélisation et le prototypage.
En outre, de nombreux IDE pour les logiciels et le matériel sont scriptables, généralement en utilisant TCL ou LUA, donc une certaine familiarité avec les langages de script en général (également Perl, Python, PHP, Javascript, etc.) serait utile.
Pour la conception matérielle, vous aurez besoin de compétences Verilog et / ou VHDL.
la source
Le C ++ est-il suffisant? Peut être.
N'oubliez pas que C est utilisé dans quelque chose comme 90 à 99% de tous les mcu: s, donc C est un must sur votre CV.
Mais comme vous êtes un gars de haut niveau, vous pouvez commencer à jouer avec l'Arduino: car ils sont programmés avec un C ++ réduit, et cela donnerait une idée approximative de ce que C ++ peut faire dans le monde des mcu en ce moment.
la source
Pour les microcontrôleurs (et je ne traiterai que des microcontrôleurs), je pense que C est un langage d'entrée bien meilleur que C ++. L'assemblage serait la prochaine étape, fantastique pour vous aider à comprendre comment votre compilateur C vous gâche, crée des bogues, vole les tics d'horloge, etc. et tire le meilleur parti de votre plate-forme. Tout cela suppose que vous parlez d'un microcontrôleur - pas d'un Arduino, d'un BASIC Stamp ou de toute autre plate-forme impliquant un microcontrôleur enveloppé.
Difficile de dire ce qui est utile pour "votre domaine" - et de suggérer qu'en tant qu'étudiant, vous ne savez peut-être pas encore vraiment quel est votre domaine !! - mais je pense que votre langue semble assez raisonnable et vous vous en servirez encore et encore. À tout le moins, avoir une bonne maîtrise d'un langage structuré rend le suivant beaucoup plus facile, mais je pense que vous trouverez toujours vos compétences en programmation Windows agréables à avoir dans votre poche.
la source
Vous pouvez apprendre C et le type de code assembleur généré par les instructions C si vous travaillez avec des processeurs, mais vous devez également vous apprendre à utiliser un shell de ligne de commande Unix tel que bash et les outils qui l'accompagnent tels que sed, ed, awk, vim / vi, find, tar, gzip, ... ainsi que Python que vous pouvez utiliser sur de nombreuses plateformes et est un bon moyen de "faire avancer les choses".
la source
Vous devez apprendre le C si vous voulez être un développeur embarqué sérieux. Vous devez également connaître l'assembleur même si vous l'utiliserez probablement très rarement.
la source
Je vais d'abord définir l'ingénieur en électronique comme désignant une personne impliquée dans la conception matérielle, du micrologiciel à la conception de la carte et à la conception de la puce. Dans certains cas, vous ferez un firmware, comme indiqué ci-dessus, vous aurez besoin de "C". Un logiciel plus profond devient simplement un outil, la compréhension de certains concepts comp sci dans des langages complémentaires du C / C ++ au langage Lisp sera plus importante que les spécificités. Vous aurez besoin d'un logiciel pour soutenir vos efforts de conception, mais cela ne prend pas le pas sur la compréhension des limites fondamentales de ce qui peut être fait dans une implémentation physique. La conception numérique n'est PAS Verilog / VHDL même si la conception est exprimée dans ces langues. Dans une conception entièrement personnalisée et in silico, vous verrez des langages similaires à Lisp et des langages fonctionnels C.
la source