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'