Comment devenir développeur de logiciels embarqués?

22

Je voudrais quelques conseils pour ceux qui veulent devenir un bon développeur de logiciels embarqués ou qui veulent s'améliorer dans ce domaine.

Que devrais-je avoir besoin d'apprendre sur le matériel, les logiciels?

Quels livres sont les plus recommandés? Blogs?

Au final, comment passer d'un amateur débutant à un excellent professionnel?

Daniel Grillo
la source

Réponses:

39

Toutes les réponses ont été bonnes jusqu'à présent, mais je vais mettre mes deux cents.

Voici une répétition de quelques conseils avec une touche et quelques extras:

  • Learn C: Le langage fondamental du matériel qui est toujours portable (trop dans une certaine mesure). Ne vous contentez pas de l'apprendre, mais devenez un expert de toutes ses fonctionnalités telles que volatile et pourquoi il est important d'écrire des pilotes de périphérique.
  • Commencez avec un bon kit de développement comme Arduino, mais comme dit précédemment, apprenez d'autres architectures une fois que vous avez une bonne idée de celui-ci. Heureusement, il existe des cartes compatibles Arduino construites avec d'autres processeurs, de cette façon, vous pouvez réécrire le même design sur un uC différent sans gâcher votre design tout en ayant une idée de quelque chose de nouveau.
  • Dans la phase d'apprentissage, n'hésitez pas à réinventer la roue sur les pilotes de périphérique ou d'autres morceaux de code. Ne vous contentez pas de copier le code du conducteur de quelqu'un d'autre. Il est utile de réinventer la roue lorsque vous apprenez.
  • Mettez-vous au défi de réécrire votre code plus efficacement en termes de vitesse et d'utilisation de la mémoire.
  • Se familiariser avec différents styles d'architectures logicielles de systèmes embarqués. Commencez par le traitement de base des boucles d'interruption / en arrière-plan, puis passez aux planificateurs en arrière-plan, puis aux systèmes d'exploitation en temps réel.
  • Obtenez un bon contrôle des sources! Je préfère Mercurial moi-même.
  • Inscrivez-vous même à des sites d'hébergement de contrôle de source gratuits comme Sourceforge.net ou Bitbucket.org pour héberger votre projet même si vous êtes le seul à y travailler. Ils sauvegarderont votre code, vous n'avez donc pas à vous soucier de ce crash occasionnel du disque dur qui détruit tout! L'utilisation d'un VCS distribué est très pratique, car vous pouvez enregistrer les modifications sur votre disque dur puis les télécharger sur le site hôte lorsque vous êtes prêt.
  • Apprenez bien vos outils pour n'importe quelle puce sur laquelle vous travaillez! Il est essentiel de savoir comment le compilateur crée l'assembly. Vous devez avoir une idée de l'efficacité du code, car vous devrez peut-être réécrire dans l'assembly. Il est également essentiel de savoir comment utiliser le fichier de l'éditeur de liens et interpréter la sortie de la carte mémoire! Sinon, comment allez-vous savoir si cette routine que vous venez d'écrire est le coupable d'avoir utilisé trop de ROM / Flash!
  • Apprenez de nouvelles techniques et expérimentez-les dans vos créations!
  • Ne présumez rien lors du débogage. Vérifiez-le!
  • Apprenez à programmer de manière défensive pour détecter les erreurs et vérifier les hypothèses (comme utiliser assert)
  • Créez des informations de débogage dans votre code où vous pouvez, comme la sortie de la consommation de mémoire ou le profilage de code avec des minuteries ou l'utilisation de broches de rechange sur l'UC pour basculer et mesurer la latence d'interruption sur une portée O.

Voici quelques livres:

Voici quelques sites Web:

  • Gourous intégrés
  • Groupe Ganssle Jack Ganssle a de merveilleuses histoires historiques à raconter. Lisez les articles. Il devient un peu moralisateur sur certaines choses.
  • Embedded.com Bonne information pour les dernières techniques et astuces de Ganssle, Barr et d'autres experts de l'industrie.
Jay Atkinson
la source
1
@Adam: J'adore ce livre! Programmeur pragmatique! Je ne peux pas croire que je l'ai oublié!
Jay Atkinson
1
+1 pour Mercurial. J'aime ça, même si j'ai le sentiment que la maîtrise de git serait plus précieuse. Apprendre les bases de SVN est assez important si vous voulez contribuer ou retirer d'autres projets, car c'est ce que beaucoup d'entre eux utilisent.
Tyblu
17
  • N'oubliez pas: «Il n'y a pas de solution miracle» , ne tombez pas dans le piège de croire qu'il existe un seul outil, méthodologie, langage ou système qui peut résoudre tous les problèmes
  • Devenez expert en C
    • Apprenez à vous débrouiller sans malloc () et POSIX
  • Ne vous laissez pas accrocher à une architecture, il est facile de devenir un fanboy PIC ou AVR ou ARM par accident
  • Construisez des trucs, déboguez-les, faites-les fonctionner. La pratique rend parfait
  • Apprenez au moins un système de contrôle de source (SVN / git / etc) et utilisez-le
  • Soyez toujours prêt à tester vos hypothèses. Le bug est généralement dans la chose que vous supposez fonctionner
  • Ne dépendez pas trop des débogueurs, ils sont différents sur chaque système et de fiabilité variable
  • Pensez avec parcimonie. Lors de la résolution de problèmes, pensez à l'empreinte du code, à l'empreinte RAM et au coût du matériel

Pour les livres, je recommanderais de fouiller l'histoire. La plupart des techniques logicielles embarquées d'aujourd'hui proviennent de la fine pointe d'antan.

Comme tout, pratiquez quotidiennement.

Toby Jaffey
la source
5
De toutes les choses que j'ai apprises, le contrôle de version (j'utilise actuellement la subversion) est la chose la plus précieuse pour ma productivité. Nous avions Microsoft Sourceafe lorsque j'ai commencé ici, j'ai donc utilisé une mauvaise solution, puis une bonne.
Kortuk
Je ne peux pas imaginer ma vie sans système de contrôle de source. J'utilise actuellement SVN aussi. Je ne sais pas comment les choses fonctionnaient avant de connaître SVN.
Daniel Grillo
1
+1 pour "Le bug est généralement dans la chose que vous supposez fonctionner"
JustJeff
"Apprenez à vous débrouiller sans malloc" - Pourquoi? Pour minimiser le risque de collision pile / tas?
rzetterberg
@rzetterberg De nombreux systèmes embarqués évitent l'utilisation de l'allocation dynamique de mémoire car cela peut conduire à la fragmentation du tas et à l'indéterminisme
Toby Jaffey
8

Les autres réponses sont excellentes, mais la plus grande différence entre un amateur et un professionnel devrait être un état d'esprit sur la qualité. Alors, continuez votre projet jusqu'au bout, ne vous arrêtez pas lorsque vous avez terminé à 80% avec un projet. Allez jusqu'au bout, prouvez qu'il fonctionne et documentez-le correctement.

Assurez-vous que votre code est lisible et maintenable.

Et n'oubliez pas de vous amuser aussi :)

Johan
la source
7

En plus de l'évidence, comme l'apprentissage du C et commencer avec une carte de développeur, vous voudrez apprendre à lire les fiches techniques du microcontrôleur .
Les fabricants ajoutent de plus en plus de fonctionnalités aux microcontrôleurs, qui deviennent donc de plus en plus complexes. La fiche technique fournit non seulement des caractéristiques électriques (ce qui est plus intéressant pour l'ingénieur en électronique que le développeur de logiciels), mais aussi une description détaillée des registres, des cartes mémoire, etc.
À la première lecture, une fiche technique peut sembler intimidante, mais ne pas les comprendre peut provoquer un mal de tête plus grave dans la phase de débogage.

stevenvh
la source
3

'Embedded' est un peu un terme chargé ..

À certains égards, tout système dédié à l'exécution d'une seule application pourrait être appelé un système embarqué, tant qu'il y a du matériel à contrôler. Vous pouvez sans doute appeler un PPC604 à 400 MHz avec 2 Go de RAM exécutant une application java au-dessus de linux un système intégré, s'il se trouve qu'il contrôle un processus via des modules d'E / S locaux. D'un autre côté, un arduino exécutant simplement une sorte d'application réseau minimale ne serait pas vraiment un système embarqué. Mais probablement «intégré» fait penser la plupart des gens aux contrôleurs basés sur flash avec seulement quelques centaines d'octets de RAM, aucun système d'exploitation à proprement parler et une pléthore de périphériques sur puce.

Cela étant dit, les deux principaux obstacles auxquels sont confrontés les programmeurs non embarqués sont probablement confrontés à l'apprentissage des systèmes embarqués: les registres d'E / S et les interruptions.

Les interruptions peuvent en fait être les deux concepts les plus faciles à gérer pour les programmeurs non intégrés, car les principaux problèmes avec ceux-ci, la concurrence et la programmation événementielle, sont souvent rencontrés dans les applications traditionnelles. Ce qui rend les interruptions douloureuses, c'est la prise de conscience de l'extrême sensibilité d'un système à la qualité de sa gestion des interruptions, et les subtilités du traitement du matériel pour effacer la condition d'interruption et configurer pour la suivante. Avec une interface graphique, un blocage tue uniquement l'application. Avec un gestionnaire d'interruption, un blocage entraîne le verrouillage de l'ensemble de votre système.

Les périphériques d'E / S semblent être la zone la plus problématique. Pour les non-initiés, il peut être assez surprenant de découvrir que la lecture de ce registre ici a un effet sur ce registre là-bas . Écriture de 1 pour effacer les bits. Bits d'état qui disparaissent d'eux-mêmes lorsque vous lisez un registre de données, etc. L'écriture d'un pilote de périphérique pour un port série vous en apprendra beaucoup sur la programmation d'E / S de bas niveau.

Il n'y a vraiment pas d'autre moyen d'apprendre ces choses que de retrousser ses manches et de programmer un langage C et / ou d'assemblage direct sur le métal nu. Même le système intégré basé sur java susmentionné a finalement besoin d'un pilote de périphérique pour les E / S, et cela signifie finalement faire face à certains C. L'expérience est le meilleur professeur. Choisissez un microcontrôleur, que ce soit MSP430, TMS320, AVR, ARM, PIC, 68HC11, peu importe, trouvez un kit d'évaluation et construisez des systèmes.

JustJeff
la source
3

$50to$mais vous devez souder pour le pro mini. Je ne suis pas un fan de la famille PIC, mais vous voudrez peut-être y apporter quelque chose comme une leçon d'histoire, il en va de même pour le 8051, les deux familles sont toujours populaires et utilisées, tout simplement pas très efficaces et ont été ignorées par d'autres architectures. Apprenez absolument ARM et le pouce, peut-être MIPS (qui est un pic-32, à ne pas confondre avec l'ancienne architecture PIC originale). L'ARMmite Pro est une bonne carte ARM d'entrée de gamme, bien que les Stellaris puissent l'être également.

Ce que vous voulez apprendre ici, c'est l'assembleur pour différentes plates-formes. C. Interaction C et assembleur. Différents outils GCC et non-GCC. Comment lire une référence de fiche technique / programmeurs (et se rendre compte qu'ils ont tous des erreurs ou peuvent être trompeurs, ne leur faites jamais confiance, le matériel l'emporte sur les documents) et comment lire ou utiliser un schéma. Ce ne sont pas des schémas compliqués normalement. Un certain nombre de cartes sont bonnes pour l'interfaçage dans les projets, ce qui signifie qu'elles n'ont pas de déchets sur la carte, juste un accès direct aux broches d'E / S. Mais ce n'est pas le meilleur pour apprendre. Quelque chose comme un Stellarisle conseil d'administration qui est pénible pour les projets a beaucoup de choses amusantes à bord pour apprendre l'intégration et apprendre à emprunter / utiliser des pilotes ou à écrire les vôtres à partir de fiches techniques. Le papillon Atmel AVR est également une bonne carte s'il est encore disponible, il peut être nécessaire de souder sur votre propre port série pour le programmer ou simplement de coincer des fils dans les trous. Ce que cela vous donne, c'est quelques périphériques que vous pouvez apprendre à programmer.

Même si vous finissez par faire du travail intégré qui implique d'écrire des applications à l'aide d'appels SDK ou API sur Linux ou un RTOS (sans jamais toucher au matériel ni lire les fiches techniques), les connaissances ci-dessus vous placeront toujours en tête du reste.

Daniel Grillo
la source
3

Cet article (traduit automatiquement du portugais vers l'anglais) a un bon aperçu du développement d'une carrière en tant que développeur de logiciels embarqués. Remarque: l'original est ici .

Il commence par décrire les domaines de connaissances que vous devez développer:

  1. Connaissances: Vous devez connaître la théorie impliquée dans les systèmes embarqués. Cela signifie du matériel et des logiciels. Il est impossible d'être un développeur compétent de logiciels embarqués sans connaître l'architecture matérielle qui fonctionne.

  2. Compétence: Vous devez acquérir de l'expérience dans la région. A besoin de pratique. Vous pouvez décorer toutes les mnémoniques de l'assembleur PIC, mais cela ne sert à rien si vous ne pouvez pas piloter une LED avec cette connaissance.

  3. Attitude: Par-dessus tout, vous devez adopter des attitudes qui vous feront grandir dans ce domaine. C'est une entreprise très dynamique avec des changements et des développements fréquents. Vous devez toujours être motivé (a) être autodidacte, aimer apprendre, "peaufiner" et comprendre comment les choses fonctionnent. Sans de telles attitudes vous donnera bientôt. Parce que ce domaine, vous devez être très, très persistant.

Il donne ensuite les conseils suivants pour maîtriser ces domaines (et les développe avec plus de texte, ce ne sont que les titres):

  1. Ce dont vous avez besoin pour apprendre le matériel (au moins)
  2. Ce dont vous avez besoin pour apprendre le logiciel (au moins)
  3. De plus, étudier les systèmes d'exploitation
  4. Vous avez besoin d'une formation
  5. Ne vous arrêtez pas, continuez à apprendre et à développer votre réseau!
Kevin Vermeer
la source
1
Merci pour le lien! La traduction de Google semble indiquer que c'est un ajustement parfait pour cette question. Cependant, nous préférons que (1) le texte soit en anglais (nous sommes une communauté anglophone , même si beaucoup d'entre nous sont au moins bilingues) - Traduction automatique uniquement si vous devez (2) la réponse inclut un résumé de l'article au cas où le lien disparaîtrait. J'ai modifié votre article pour respecter ces directives et vous ai donné une note positive pour cela!
Kevin Vermeer
2

Réfléchissez bien avant de devenir ingénieur logiciel embarqué. J'ai eu des phases dans ma carrière. J'ai développé des logiciels les 5 premières années, puis je suis passé aux ventes / marketing, je l'ai fait pendant 15 ans, j'ai géré une entreprise de 100 M $ et maintenant je suis de retour au logiciel.

Quand je reviens au logiciel après 15 ans, je me souviens pourquoi je suis parti en premier lieu. C'est difficile. Il a besoin de concentration, de plusieurs centaines de lignes de code se touchant et vous devez tous le garder en mémoire. L'embarqué est particulièrement difficile.

Vous devez également vous comprendre. Si vous êtes généralement un gars intelligent, méticuleux et patient, vous feriez un grand ingénieur. Si vous en manquez, vous serez au mieux moyen. Pensez-y. Si vous êtes ultra intelligent et pas patient, cela ne vaut pas grand-chose car peu importe votre intelligence, une bonne ingénierie demande de la patience et une attention aux détails.

Vous devez également être à l'aise de regarder les heures de code à la fois sans parler. J'observe que les personnes ayant de bonnes compétences sociales trouvent cela insupportable.

Si tout cela se vérifie, alors lisez tous ces grands livres, faites les exercices et vous ferez un grand ingénieur .. Bonne chance

Frank
la source
1

Tout le monde dit de grandes choses. Je vais donc vous donner des conseils généraux: lire lire lire lire lire lire lire lire lire!

Lisez chaque article sur http://embeddedgurus.com Si vous ne comprenez pas quelque chose, recherchez-le. Si, dans l'explication de ces choses, vous trouvez quelque chose que vous ne comprenez pas, lisez-en plus. Je suis sur le point de me diriger vers un poste de logiciel intégré et mon expérience est une poignée de projets professionnels au cours des dernières années et beaucoup de lecture. L'expérience vous permet d'essayer des choses, mais la lecture vous permet de savoir si les choses que vous avez essayées ont déjà été faites, peut-être mieux que vous. Il vous présente des concepts avec lesquels vous pouvez travailler en toutes circonstances.

Lisez!

AngryEE
la source
0

Devenez un expert en C Comprendre les temporisateurs et les communications série. Vous devriez vous salir les mains avec. Comprendre les protocoles RF, les adapter à vos besoins. Ne vous contentez pas d'essayer aveuglément des combinaisons de code lors du débogage. Le code fait exactement ce que vous lui demandez de faire. Lisez le manuel d'utilisation et la fiche technique, puis effectuez une modification si quelque chose ne fonctionne pas. Tout cela dit et fait, la seule vraie façon de devenir un expert est de pratiquer. Continuez à créer des applications. Bientôt, cela deviendra une seconde nature.

Dominic Pritham
la source