Est de bas niveau / systèmes embarqués programmation difficile pour les développeurs de logiciels?
Compte tenu de mon expérience en tant que généraliste, je peux couvrir une grande partie de la zone, de l'électronique analogique à l'écriture d'applications simples que l'interface d'un SGBDR backend.
Je travaille actuellement dans une entreprise qui fabrique du matériel pour résoudre l'industrie de problèmes spécifiques. Nous avons un programmeur expérimenté qui ont écrit des applications d'entreprise, les jeux vidéo, et tout un tas d'autres choses pour PC. Mais quand je lui parle au sujet de faire la programmation de bas niveau, il a à la fois exprimer leur intérêt et aussi le doute/l'incertitude sur la manière de rejoindre le projet.
Même quand on parle de PC, il semble être plus à l'aise d'exploitation au niveau du langage de bas niveau de stuff (jeux d'instructions, rapport de recherche internationale). Encore, il est un gars intelligent, et je pense qu'il serais apprécier le travail une fois qu'il est sur l'apprentissage initial de la voussure. Mais peut-être que c'est mon propre enthousiasme pour le bas niveau de stuff parler... Si il était vraiment intéressé, peut-être qu'il aurait déjà commencé à apprendre des choses dans ce sens?
Vous disposez d'une expérience dans la réalisation de ce logiciel-pour-matériel (ou le logiciel de bas niveau) de la transition? Ou, mieux encore, de prendre un logiciel seul mec, et la transition de lui pour le bas niveau de stuff?
Edit:
P. S. j'aimerais entendre les intervenants de ce que leur propre arrière-plan est -- EE, CS, les deux?
Selon votre demande, je suis un EC (ingénieur en informatique) qui préfère le hardware/firmware côté de son développement, mais à l'aise toute la gamme - voir mon stackoverflow et/ou profil linkedin.
J'ai un CIS degré circa 1985 et ont travaillé à travers les domaines, à partir d'une firme d'Ingénierie de faire PA&C à plusieurs [mort] web, startups, de l'Ingénierie aux Services Financiers.
Une partie du problème est de vous soucier du temps d'exécution de chaque morceau de code.
OriginalL'auteur Toybuilder | 2008-10-23
Vous devez vous connecter pour publier un commentaire.
À la fin de la journée, tout est une API.
Besoin d'écrire du code pour un SPI périphériques à l'intérieur d'un microcontrôleur? Eh bien, obtenir la fiche technique ou le manuel d'utilisation du matériel, et de regarder le SPI périphérique. C'est l'un, grand, complexe API.
Le problème, c'est que vous avez à comprendre le matériel et certains EE de base fondamentaux afin de comprendre ce que l'API de moyens. La fiche technique n'est pas écrite par et pour les développeurs de logiciels, il a été écrit pour les ingénieurs de matériel, et peut-être les ingénieurs en logiciel.
C'est donc du point de vue de la configuration matérielle (en face - le microcontrôleur de la société est une entreprise de matériel rempli de matériel/asic ingénieurs).
Ce qui signifie que la transition n'est pas simple.
Mais il n'est pas difficile - il est juste un peu différente de domaine. Si vous pouvez mettre en œuvre un programme d'étude, commencer avec Lapin Semi-Conducteurs's trousses. Il y a assez de logiciel un SW gars peut vraiment creuser avec peu d'effort, et le MATÉRIEL est facile à traiter, car le tout est enveloppé dans joli petit bibliothèques. Quand ils veulent faire quelque chose de complexe, ils peuvent creuser dans la l'accès direct au matériel et le violon, au niveau le plus bas, mais en même temps, ils peuvent faire quelques jolies choses cool comme construire des petits serveurs web ou pan/tilt caméras réseau. Il ya d'autres entreprises avec des offres similaires, mais le Lapin est vraiment concentré sur la fabrication de matériel facile pour les ingénieurs en logiciel.
Alternativement, les mettre dans la plate-forme Android. Il ressemble à un système unix, jusqu'à ce qu'ils veulent faire quelque chose d'intéressant, et puis ils ont le désir d'attaquer ce petit problème et ils vont apprendre sur le matériel.
Si vous avez vraiment envie de sauter dans la partie profonde, aller avec un kit arduino - à bas prix, gratuit compilateurs et bibliothèques, assez facile pour commencer, mais vous devez accrocher les fils jusqu'à faire quelque chose d'intéressant, qui pourrait être trop grand d'un obstacle pour un réticents ingénieur logiciel. Mais un peu d'aide et quelques coups de coude dans la bonne direction et ils seront absolument ravis d'avoir un peu d'affichage à LED que wibbles* comme le nightrider lumières...
-Adam
*Oui, c'est une technique d'ingénierie terme.
+1 pour le KnightRider lumières 🙂
À mon humble avis, le faible niveau de l'Api sont beaucoup plus faciles à traiter et à comprendre que certains web Léviathan. Il vous dit exactement que faire, ce qui est autorisé et quand. Vous devez traiter avec des octets et des bits (et masques de bits), mais c'est tout.
OriginalL'auteur Adam Davis
Le mieux intégré les programmeurs j'ai travaillé avec des EE sont formés et ont appris SW sur le travail. Le pire des développeurs de logiciels embarqués sont récentes CS diplômés qui pensent que SW est la seule façon de résoudre un problème. J'aime à penser que la programmation embarquée comme le fond de la SW de la pyramide. Il assure une stabilité de la couche d'abstraction/fondation qui rend la vie plus facile pour les développeurs d'applications.
...une tentative de lecture de la minuterie peut produire des données corrompues, si, entre les deux lectures une interruption lit également la minuterie. En revanche, si un tel matériel existe, le logiciel aurait à lire la moitié basse et haute de la moitié, et puis relire la moitié basse pour s'assurer qu'il n'a pas changé (recommencer l'opération si c'est le cas), mais une telle procédure pourrait être employé dans les deux principaux de la boucle et de l'interruption des contextes sans les lectures simultanées interférents.
OriginalL'auteur humble_guru
"Dur" est très relative. Si vous avez l'habitude de penser dans le serré, parfois complexes façon, vous avez besoin pour les petites code embarqué (par exemple, vous êtes un développeur de pilote), alors certes, il n'est pas "dur".
Pas de "bash" (no pun intended) shell scripteurs, mais si vous écrivez des scripts shell et perl toute la journée, alors qu'il pourrait très bien être "dur".
De même, si vous êtes un de l'INTERFACE utilisateur gars pour Windows. C'est un genre différent de la pensée.
OriginalL'auteur warren
C'est très subjectif, je suppose, ses raisons peuvent être nombreuses. Mais si il est comme moi, je sais où il veut en venir. Laissez-moi vous expliquer.
Dans ma carrière, j'ai consacré 6 ans dans l'industrie des télécommunications, de travailler beaucoup avec intégration de SDK middleware dans le bas de gamme des téléphones mobiles, etc.
La plupart des environnements embarqués, je l'ai connu sont comme les conditions météorologiques difficiles pour un programmeur, vous avez en permanence pour surmonter les limitations en ressources, etc. Certains pourraient trouver cela un défi et en profiter pour le défi lui-même, certains pourraient se sentir proche de "choses sérieuses" - le matériel, certains pourraient ressentir les limites de leur créativité.
Je suis le genre qui sent les limites de ma créativité.
J'apprécie d'être de retour au bureau Windows de l'environnement et de battre des ailes à élaborer des conceptions de classe, d'étirer mes jambes un peu clockcycles supplémentaire, l'utilisation inutile des quantités de mémoire pour les diagnostics etc.
Sur certaines unités intégrées dans le passé, j'ai à peine eu le soutien de fseek() (C ANSI standard de fichier de la fonction). Si la chance, un "chien de garde" pourrait donner des indices sur où quelque chose s'est écrasé. Sans parler de la douleur de communiquer avec l'utilisateur dans un thread de souscription des marais.
Bien, vous savez ce que je veux en venir. À mon avis, il n'est pas nécessairement difficile, mais c'est tout à fait un bond en avant, avec éventuellement un peu de réutilisation de votre expérience actuelle.
Ce qui concerne
Robert
OriginalL'auteur sharkin
Pourquoi le développement intégré est "dur":
1) Le contexte peut passer à une interruption entre chaque instruction machine. Depuis langage de haut niveau des constructions peut correspondre à plusieurs assemblée instructins, ce pourrait même être à l'intérieur d'une ligne de code, par exemple, de longues var = 0xAAAA5555. En cas d'accès à une routine de service d'interruption, dans un 16 bits processore var peut être seulement de moitié.
2) la Visibilité dans le système est limité. Vous n'avez même pas sortie de Hyperterminal, à moins que vous écrivez vous-même. Les émulateurs ne sont pas toujours bien ou de façon cohérente (même si elles sont mieux que ce qu'ils utilisés pour être). Vous devez savoir comment utiliser les oscilloscopes et les analyseurs logiques.
3) les Opérations qui prennent du temps. Par exemple, disons que votre série de l'émetteur utilise une interruption de signal quand il est temps d'envoyer un autre octet. Vous pouvez écrire de 16 octets à une mémoire tampon de transmission, puis désactivez l'interrompt et me demande pourquoi votre message n'est jamais envoyé. Calendrier en général est une partie délicate de la programmation embarquée.
4) Vous êtes soumis à de subtiles des conditions de course qui se produisent rarement et sont très difficiles à déboguer.
5) Vous devez lire le manuel. Beaucoup. Vous ne pouvez pas le faire fonctionner en dupant autour. Parfois 20 choses doivent être réglées correctement pour obtenir ce que vous êtes après.
6) Le matériel n'est pas toujours facile à endommager, et il faut un certain temps pour comprendre que vous avez cassé.
7) le Logiciel de réparation dans les systèmes embarqués sont généralement très coûteux. Vous ne pouvez pas simplement mettre à jour une page web. Un rappel peut effacer tous les profits que vous faites sur l'appareil.
Il ya probablement plus, mais j'ai cette condition de course à résoudre...
OriginalL'auteur Jeff Geisler
Il y a une véritable différence dans l'état d'esprit d'utilisateur de niveau de développement d'application (c'est à dire, les PC ou les applications Web) dur date limite de réponse en temps réel le développement de l'application (c'est à dire, l'interface matériel/logiciel).
Interruptions, des jeux d'instructions, le changement de contexte et dur contraintes de ressources sont relativement inconnu à la moyenne de votre développeur. Je suppose ici que votre développeur moyen " n'est pas une Électrique/Électronique ou autre, l'Ingénieur de formation.
La transition pour ce développeur vous mentionner peut-être bien à l'extérieur de sa zone de confort. Certains d'entre nous comme l'étirement comme ça. D'autres d'entre nous ont décidé le point de vue n'est pas la peine de le monter.
De même, les gens qui ont été dans la zone matériel (c'est à dire, Ingénieurs) ont souvent de la difficulté avec les hypothèses et le langage de développement de logiciels.
Ce sont des brutes des généralités, bien sûr, mais j'espère donner une idée.
OriginalL'auteur Ken Gentle
Il a besoin pour être à l'aise avec le bas niveau de stuff, mais surtout pour le débogage et les problèmes de terrain. Il y a un sérieux courbe d'apprentissage en fonction de l'architecture, mais pas impossible. D'autre part, le faible niveau du code (en général) plus de temps et le débogage de code de niveau supérieur. Donc, si vous avez besoin de retourner à un faible niveau tout le temps, alors peut-être quelque chose n'est pas droite dans la conception. Même pour les commandes intégrées j'ai construit, je passe la grande majorité du temps dans le code de haut niveau. Bien que quand vous avez des problèmes, il est très avantageux d'avoir un très bon faible niveau de connaissances.
OriginalL'auteur Ryan
Je suis un EE tourné Ingénieur Logiciel. Je préfère la programmation de bas niveau. La plupart des développeurs de logiciels de formation classique que je connais ne veulent pas intervenir à ce niveau qu'ils veulent api pour l'appel. Donc, pour moi, c'est un win win, j'ai créer le pilote de bas niveau et de l'api pour les utiliser. Il y a une "nouvelle" degré, à moins de nouvelles depuis que je suis allé à l'université, appelé Ingénieur en Informatique. Hmm, il pourrait être un diplôme en génie électrique, pas l'informatique, mais c'est une belle combinaison de logiciel et de matériel numérique de base. Les personnes avec qui j'ai travaillé à partir de ce champ sont beaucoup plus à l'aise avec un faible niveau.
Si la personne n'est pas à l'aise ou en prêt, puis les placer dans un endroit où ils sont à l'aise. Laissez-les faire de la documentation ou de travailler sur l'interface utilisateur. Si tous les travaux à la société exige de faible niveau de travail, alors cette personne a besoin de le faire ou de trouver un autre emploi. Pas de sucre manteau.
Je pense aussi qu'ils vont en profiter une fois qu'ils obtenir plus de la bosse, la liberté que vous avez à ce niveau, pas entravée par les systèmes d'exploitation, etc. Récemment, j'ai assisté à quelques collègues de l'expérience pour la première fois de voir leur logiciel à exécuter en vertu de la simulation. Chaque filet dans le processeur et les autres sur la puce de périphériques. Non, vous n'avez pas un tableau sur une interface graphique (debugger) montrant l'état actuel de la mémoire, vous avez à regarder le bus mémoire, recherchez l'adresse qui vous intéresse, regardez pour une lecture ou d'écriture de signal et le bus de données. Je m'inquiète à propos de la journée que le silicium arrive et ils n'ont plus à ce niveau de visibilité. Sera comme un drogué en désintoxication.
OriginalL'auteur old_timer
Bien, j'ai coupé mes dents sur le matériel quand j'ai commencé la lecture Populaire de l'Électronique à l'âge de 14 ans – c'était AVANT que les ordinateurs personnels, dans le cas où vous vous poseriez et si vous n'avez pas bien, vous savez, de toute façon. lol
J'ai fait le niveau le plus faible bit-bang des trucs sur le 8048/51 microprocesseur, fait du PIC et quelques autres, puce unique de variations et de cours de Lapin semi-conducteurs. (idéal si vous êtes en C). C'est super (et le plaisir) de choses; Oui, il y a une manière différente de voir les choses plus difficiles, mais une partie de cette information est un peu plus difficile à trouver car il n'est pas discuté que les problèmes de logiciels. (Bien sûr, cela dépend du cercle d'amis avec qui vous associer, hein).
Mais, ayant dit tout cela, je tiens à vous rappeler une technologie qui a commencé à combler l'écart pour les programmeurs dans le monde du hardware et est depuis devenu un très fort joueur et qui est le .NET micro framework. Vous pouvez trouver des informations sur cette technologie à la suivante;
http://msdn.microsoft.com/en-us/embedded/bb267253.aspx
Il aborde les mêmes questions .NET web développement que vous pouvez utiliser certains (très peu, en fait) de votre PC à base de connaissances dans les nouveaux environnements de prudence, bien sûr, que votre machine cible n'a pas 4 go de RAM – elle ne peut avoir de 64 ko (ou moins)
À partir de la version 2.5 de l' .NET micro framework, vous avez accès aux réseaux et services web – chemin kewl, hein? Il ne s'arrête pas là ... Souhaitez contrôler les lumières dans votre maison? Comment faire un temp station d'enregistrement? Toutes les compétences que vous avez déjà. Eh bien, pour la plupart -- Vérifier le lien.
Le SDK se branche dans votre VisualStudio IDE. Il y a un certain nombre de “Kits de Développement” pour une très raisonnables montant de la trésorerie – Maintenant, ce qui serait normalement prendre une courbe d'apprentissage importante dans les composants, la construction d'une carte de circuit de câblage et de “trucs” qui peut être fait assez facile avec un dev kit et un simple code – bien sûr, vous devrez peut-être faire occasionnellement un peu bang opération, mais de plus en plus du capteur de gens sont à fournir .NET micro framework pilotes – ainsi, le développement de matériel peut être plus proche que vous le pensez...
Espère que ça aide...
OriginalL'auteur Borzio
J'aime bien les deux. Incorporé me pousse et obtient vraiment moi à entrer dans un viscéral. Faire quelque chose qui affecte la macro monde physique est très satisfaisante. Mais j'ai dû faire beaucoup de rattraper son retard sur l'électrique/électronique de la fin, puisque mon baccalauréat en informatique. J'ai une assez généraliste en arrière-plan, où j'ai étudié, les graphiques, les compilateurs du langage naturel, etc. Maintenant, je suis en train de faire des études supérieures dans les systèmes embarqués. Vraiment difficile de s'adapter à l'absence d'exécution des installations comme un système d'exploitation.
OriginalL'auteur Paul Nathan
De bas niveau de la programmation embarquée a aussi tendance à inclure à faible niveau de débogage. Qui (dans mon expérience) implique généralement (au moins) l'utilisation d'un oscilloscope. À moins que votre collègue va être heureuse de passer au moins une partie du temps en contact physique avec le matériel et de penser en termes de microsecondes et volts, je serais tenté de les laisser faire.
OriginalL'auteur Martin Thompson
D'accord sur le "dur" terme est tout à fait relative.
Je dirais différentes, comme vous le feriez besoin d'employer des différents modèles de développement que vous ne l'utilisez pas dans d'autres types d'environnement.
La contrainte de temps par exemple, pourraient nécessite une courbe d'apprentissage.
Cependant, en étant curieux, serait une qualité pour un développeur, ne serait pas?
OriginalL'auteur call me Steve
Vous que n'importe qui avec assez de connaissances pour ne pas se sentir complètement perdu dans une zone (en plus de la bosse?) profiter les défis de l'apprentissage quelque chose de nouveau.
Je me sentirais assez nerveux en cours de déplacement vers le niveau d'instruction, les jeux, etc comme il ya une énorme quantité de connaissances de base nécessaires pour se sentir à l'aise dans l'environnement.
Peut faire une différence si vous êtes en mesure de soutenir le développeur dans l'apprentissage de la façon de faire. Avoir quelqu'un là, vous pouvez demander à parler de ce problème est d'une grande aide dans ce genre de domaine du changement.
Il peut être utile d'avoir le développeur affecté à un petit projet avec d'autres personnes dans un premier temps et voir comment ça se passe. S'il en exprime l'enthousiasme pour essayer un autre projet, les choses devraient circuler à partir de là.
OriginalL'auteur Nat
Je dirais qu'il n'est pas plus difficile, il faut juste un différent ensemble de connaissances, des considérations différentes.
OriginalL'auteur JeffV
Je pense que cela dépend de la manière qu'ils ont de leur environnement, et le type de incorporés de travail que vous êtes en train de parler.
De travail sur un linux embarqué plate-forme, disons, est beaucoup plus faible sauter que d'essayer d'écrire du code sur 8 bits plate-forme sans système d'exploitation.
Si elles sont le genre de personne qui a une bonne compréhension de ce qui se passe en dessous de l'api et de l'environnement qu'ils sont utilisés, alors il ne sera pas de trop d'un tronçon de se déplacer dans le développement embarqué.
Cependant, si leur vision du monde s'arrête au haut niveau d'api qu'ils ont été à l'aide, et ils n'en ont aucune idée de quoi que ce soit sous qu'ils vont avoir du fil à retordre.
Comme un (très) générale déclaration s'ils sont à l'aise de travailler sur des applications multithread ils seront probablement ok, qui partage les mêmes problèmes de volatilité des données que vous avez lorsque vous travaillez sur des projets.
Avec tout cela dit, j'ai vu plus intégré les programmeurs travaillant avec réussite dans le PC de développement que j'ai l'inverse. (bien sûr, je n'aurais pas vu un juste cross section)
OriginalL'auteur Andrew Edgecombe
"Mais quand je lui parle au sujet de faire la programmation de bas niveau, il a à la fois exprimer leur intérêt et aussi le doute/l'incertitude sur la manière de rejoindre le projet." - Ce qui signifie que vous lui laissez essayez et vous vous préparez à embaucher quelqu'un d'autre dans le cas où il ne passe pas la courbe d'apprentissage.
OriginalL'auteur Windows programmer
j'ai commencé comme SW ingénieur, je suis maintenant HW !
l'important est de comprendre comment il fonctionne et d'être motivé !
OriginalL'auteur 0x016F2818