Salut Khabrovchanin,
Dans cet article, je veux spéculer sur la façon de développer un programmeur de microcontrôleur. Cet article est un petit sujet de lecture pour ceux qui, comme moi une fois, n'ont pas su où se développer davantage dans leur métier. Vous pouvez peut-être trouver quelque chose d'intéressant ici.
En ce moment, je travaille comme programmeur depuis 3 ans, et jusqu'à récemment, je ne voyais pas quoi faire ensuite. Cependant, j'ai ensuite rencontré une personne avec plus de 20 ans d'expérience dans la programmation de systèmes embarqués, et en communiquant avec lui, j'ai identifié certains aspects dans lesquels vous pouvez vous développer. Ici, je veux les partager, ainsi que mon expérience personnelle. En aucun cas, je ne veux enseigner à qui que ce soit, je vais juste partager mes meilleures pratiques, et vous pouvez décider vous-même si ces conseils sont utiles ou non.
Chaque mois, il y a un autre article pour les débutants avec une LED clignotante. À son tour, il n'y a tout simplement pas d'articles pour les programmeurs intermédiaires. Ici, je veux montrer que la programmation correcte des microcontrôleurs n'est pas une tâche triviale. Cela ne peut pas être appris en quelques années. En 2020, ce n'est pas très différent de la tâche de programmation des systèmes conventionnels, car les MC deviennent de plus en plus puissants et plus puissants. Bien sûr, je parle de projets d'un million de lignes ou plus.
Il semble que l'introduction ait été quelque peu retardée, alors je vais passer aux choses sérieuses. Dans cet article, seul l'aspect de la programmation sera pris en compte, je ne touche pas aux circuits. J'ai essayé de hiérarchiser les éléments, mais la différence entre le premier et le dernier est petite, tous les éléments sont importants.
1. Apprenez le langage C ++.
C'est un conseil trivial, cependant, j'ai jugé bon de le souligner. Le fait est que presque tout le monde que je connais continue de programmer en C pur même maintenant. Pourquoi est-ce mauvais? Selon diverses sources, un projet de plus de 100000 lignes (ce qui n'est pas un grand nombre) devient pratiquement non pris en charge dans C. En 2020, les compilateurs pour MK ont atteint un tel niveau de compilation du code source que l'échappement de C et C ++ ne différera pas. Mais la lisibilité du code sera complètement différente. Classes, POO, fonctions virtuelles, pointeurs intelligents, etc. - ce sont tous de puissants assistants pour le programmeur. Malheureusement, il n'est pas possible de distinguer et de recommander un seul livre, car il y en a trop.
2. Étudiez les modèles de conception.
Ce n'est un secret pour personne que l'écriture d'un bon programme C ++ est toujours un défi. Ce langage est trop vaste, il regorge de trop d'outils. Qu'est-ce qu'un modèle de conception? Ceci est une sorte de guide pour résoudre des tâches fréquemment répétitives. Ici, je peux recommander un classique, à savoir le travail de la bande de quatre "Modèles de conception orientée objet Gamma Erich, Helm Richard". Il est difficile de trouver un programmeur C ++ ordinaire qui n'a pas lu ceci, pourquoi sommes-nous pires?
3. Découvrez le monde merveilleux de STL
Je pense que cette bibliothèque n'a pas besoin d'être présentée. Pour ceux qui ne savent toujours pas ce que c'est, c'est la bibliothèque de modèles standard. Il vous permet de rendre votre code plus court et plus facile à comprendre grâce à une programmation générique. Cet outil est déjà intégré au C ++. Cependant, pour une raison inconnue, il est très difficile de trouver un projet pour MK, où il est utilisé. Bien que les compilateurs modernes (le même IAR) le prennent en charge.
4. Ajoutez des tests unitaires à vos projets.
Ici, je n'ai rien de spécial à écrire. D'innombrables ouvrages ont été écrits sur ce que c'est et pourquoi. L'effet des tests unitaires et du développement via les tests est significatif. Ces tests vous permettent d'attraper de nombreux bogues avant même que les correctifs ne soient envoyés à OT. De plus, il existe un excellent livre sur le sujet: Jeff Langr - Modern C ++ Programming with Test-Driven Development (2013).
5. Explorez le noyau
Bien que nous programmions différents microcontrôleurs, la plupart ont des noyaux de la série CortexM. Les noyaux ont de nombreuses fonctionnalités différentes, telles que des masques de bits ou des minuteries de débogage. Tout cela peut être utile. Il est également utile de savoir comment les RON sont enregistrés lorsqu'ils sont interrompus, par exemple. Ici, je peux recommander «ARM Cortex-M3 core. Le guide complet par Joseph Yu. "
6. Apprendre l'assembleur
Cela peut paraître ridicule, mais je pense que connaître l'assembleur pour le débogage des applications est essentiel. De plus, c'est assez amusant d'écrire. Avec l'aide d'Assembler, vous pouvez clairement comprendre ce qui se passe à ce point d'arrêt particulier. Le livre du paragraphe précédent convient également ici.
7. Quelques mots sur IDE
Récemment, je suis passé au bundle VS + VGDB. Cet ensemble présente de nombreux avantages et, ensemble, ils l'emportent sur le seul avantage de l'IAR, la taille du binaire. Dans gcc, vous pouvez définir des indicateurs pour les avertissements étendus, ainsi qu'un indicateur indiquant que l'avertissement doit être considéré comme une erreur (IAR l'a également, d'ailleurs). Avec cette approche, votre IDE lui-même vous aide à coder proprement. Il y a un bon article à ce sujet
.sur habr. D'ailleurs, j'ai rencontré de telles entreprises qui pour une tâche de test (lors d'un entretien) obligent à écrire du code avec ces drapeaux.
C'est probablement tout. J'espère que si vous avez suivi le lien, vous avez trouvé ce que vous recherchiez. Veuillez partager dans les commentaires les autres chemins de développement que les programmeurs intégrés peuvent avoir.
PS Dans cet article, il y a des choses qui ne sont pas mentionnées, par exemple, la programmation de périphériques complexes via des registres ou RTOS. On suppose que le lecteur possède déjà ces compétences, ou du moins connaît leur existence.