it-swarm-eu.dev

Ist Embedded Programming näher an der Elektrotechnik oder Softwareentwicklung?

Ich werde mit einem Job zum Schreiben von eingebettetem C auf Mikrocontrollern angesprochen. Zuerst hätte ich gedacht, dass das Einbetten der Programmierung im Software-Stack für mich zu niedrig ist, aber vielleicht denke ich falsch darüber nach.

Normalerweise hätte ich die Gelegenheit, eingebetteten Code zu schreiben, abgeschüttelt, da ich mich nicht als Elektrotechniker betrachte. Ist das eine schlechte Annahme? Kann ich interessante und nützliche Software für eingebettete Systeme schreiben oder werde ich mich dafür strampeln, dass ich zu wenig auf dem Software-Stack habe?

Ich ging zur Schule für Informatik und genoss es wirklich, einen Compiler zu schreiben, über gleichzeitige Algorithmen nachzudenken, Datenstrukturen zu entwerfen und Frameworks zu entwickeln. Derzeit bin ich jedoch als Webentwickler beschäftigt, was die interessanten Dinge, die ich gerade beschrieben habe, nicht schreit. (Ich beschäftige mich derzeit mit Problemen wie: "Dieses Kontrollkästchen muss 4 Pixel links sein" und "Dieses Datum ist falsch formatiert".)

Ich schätze jeden Beitrag. Ich weiß, dass ich die Entscheidung für mich selbst treffen muss. Ich möchte nur klarstellen, was es bedeutet, ein eingebetteter Programmierer zu sein und ob es zu dem passt, was ich interessant finde.

35
Jeremy Heiler

Wenn Sie gut an eingebetteten Systemen arbeiten möchten, müssen Sie manchmal wie ein EE denken. Dies ist im Allgemeinen der Fall, wenn Sie Code für die Schnittstelle mit den verschiedenen Peripheriegeräten (serielle Busse wie UART, SPI, I2C oder USB), 8- und 16-Bit-Timern, Taktgeneratoren sowie ADCs und DACs schreiben. "Datenblätter" für Mikrocontroller umfassen häufig Hunderte von Seiten, da sie jedes Bit jedes Registers beschreiben. Es ist hilfreich, einen Schaltplan lesen zu können, damit Sie eine Karte mit einem Oszilloskop oder einem Logikanalysator prüfen können.

Zu anderen Zeiten schreibt es nur Software. Aber unter strengen Auflagen: Oft haben Sie kein formelles Betriebssystem oder ein anderes Framework, und möglicherweise haben Sie nur wenige KB RAM und möglicherweise 64 KB Programmspeicher. (Diese Einschränkungen setzen voraus, dass Sie auf kleineren 8- oder 16-Bit-Mikros programmieren. Wenn Sie mit eingebettetem Linux auf einem 32-Bit-Prozessor arbeiten, haben Sie nicht die gleichen Speicherbeschränkungen, müssen sich aber dennoch mit benutzerdefinierten Einstellungen befassen Peripheriegeräte, für die Ihre Linux-Distribution keine Treiber bereitstellt.)

Ich habe einen Hintergrund in EE und CS, also genieße ich beide Seiten der Medaille. Ich mache auch Webprogrammierung (meistens PHP) und Desktop-Apps (C # und Delphi), aber ich habe es immer am meisten genossen, an eingebetteten Projekten zu arbeiten.

33
tcrosley

@ tcrosleys Antwort ist ausgezeichnet. Sie müssen kein Elektrotechniker sein, aber es hilft, die Grundlagen zu kennen.

Ich glaube nicht, dass Sie befürchten müssen, "zu wenig Software-Stack" zu haben. Ich musste als Embedded Engineer viele sehr interessante Probleme lösen. Sie erwähnen eine Liste von Aufgaben, die Ihnen gefallen haben:

  • Gleichzeitige Algorithmen - Der Umgang mit Interrupts auf asynchroner Hardwareebene bietet ebenso viele interessante Herausforderungen wie die Verwendung eines Betriebssystem-Thread-Modells.

  • Datenstrukturen entwerfen - Überprüfen. Design für Kompaktheit und effizienten Zugang.

  • Frameworks entwickeln - Überprüfen. Auf Bare-Bones-Systemen können Sie am Ende ein Mini-Betriebssystem entwerfen.

  • Schreiben eines Compilers - möglicherweise nicht, aber Sie können am Ende eine Codeoptimierung auf niedriger Ebene durchführen, die dem Schritt der Assemblygenerierung eines Compilers ähnelt.

Ich würde mich dafür entscheiden, jeden Tag an eingebetteten Systemen zu arbeiten, anstatt Benutzeroberflächen zu codieren. Sie werden nie vergessen, wann Sie zum ersten Mal beobachten, wie sich eine Maschine so bewegt, wie Sie es programmiert haben. Es ist viel befriedigender als Pixel zu verschieben.

20
AShelly

Als eingebetteter Programmierer ist es meine Aufgabe, benutzerdefinierte Hardware zum Laufen zu bringen. Normalerweise habe ich eine Reihe von Software auf einem Entwicklungsboard oder eine frühere Version der Hardware entwickelt. Wenn das neue Board kommt, ist es meine Aufgabe, meine Software auf das Board zu setzen und zu demonstrieren, dass alles funktioniert.

Da es fast immer ein Problem gibt, sind Debugging-Fähigkeiten unerlässlich. Wenn das externe Peripheriegerät nicht funktioniert, handelt es sich um einen schlechten Chip, eine schlechte Verbindung zum Chip, einen fehlerhaften Code oder eine falsche Verwendung des On-Chip-Peripheriegeräts? Die einzige Möglichkeit, dies festzustellen, ist das umfangreiche Debuggen. Dies bedeutet, dass Sie mit Oszilloskopen, Netzwerkanalysatoren, Logikanalysatoren und Ziel-Debuggern vertraut sind. Der Debugging-Prozess wird fast wissenschaftlich. Ich entwickle eine Hypothese, entwerfe ein Experiment, um Beweise für oder gegen meine Hypothese zu liefern, und teste.

Bei der Bewertung von Praktikanten oder neuen Embedded-Ingenieuren ist diese Fähigkeit am kritischsten. Alle Software hat Probleme, aber sobald Sie anfangen, sich mit den physischen Welten zu verbinden, nimmt die Vielfalt dieser Probleme exponentiell zu. Die Essenz meiner Arbeit besteht darin, die lange Reihe von Problemen zwischen Konzept und Realität zu lösen.

6
Ben Gartner

Nach meiner Erfahrung erzielt man bessere Ergebnisse bei der Entwicklung eingebetteter Systemsoftware mit einem "Softwareentwickler" -Hut als mit einem "Elektronikingenieur" -Hut. (Praktiken wie TDD & CI sind in der Hardwareentwicklung weniger verbreitet.)

Andererseits denke ich, dass die Erfahrung mit der Entwicklung für ein eingebettetes System eines besser macht; abgerundeter Softwareentwickler.

5
William Payne

Ich war vor ungefähr 8 Jahren in einer ähnlichen Situation. Ich hatte zu diesem Zeitpunkt 7 Jahre Softwareentwicklung in Anwendungs- und Serverumgebungen. Meine einzige Erfahrung im Umgang mit Hardware auf niedrigem Niveau war das Schreiben in Z80 Assembler als Teenager in einem ZX-Spektrum.

Es war sicherlich eine Herausforderung. Ich fand den Umgang mit den Chipsätzen im Assembler sehr unterhaltsam und habe sicherlich viel über Hardware gelernt. Ein wesentlicher Teil meiner Rolle bestand darin, die Hardware mithilfe von Software zu testen, also zu lernen, mit der Programmierung umzugehen und zu erkennen, dass Ihr Softwarefehler tatsächlich ein Hardwarefehler ist. Tatsächlich kann es manchmal ziemlich viel Arbeit von Software- und Hardware-Mitarbeitern erfordern, um festzustellen, ob es sich bei einem Fehler um Hardware oder Software handelt.

Ein Aspekt, den ich nicht erfüllen konnte, war die Arbeit mit Gerätetreibern. Ich habe das nie wirklich verstanden, was eine Sache ist, die ich und dieser Geschäftsführer nie verstanden haben, warum. Es wurde einfach eine akzeptierte Tatsache.

Es ist wichtig, sich mit einem Okkiloskop und einem Lötion vertraut zu machen. Denken Sie daran, dass ein Hardware-Typ, der die Nummer 26 sagt, IMMER 0x26 bedeutet, nützlich ist. Die Erkenntnis, dass Hardware-Ingenieure den Umgang mit Software als sehr frustrierend empfinden, hilft, aber ein Hardware-Projekt ohne Software wird als Kabel bezeichnet.

Ich blieb 4 Jahre in dieser Rolle und ging nur, weil ich für eine wirklich fantastische Gelegenheit geworben wurde.

3
Michael Shaw

Ich bin kein Elektrotechniker, habe aber ein wenig Embedded-Software entwickelt. Das größte Problem, das ich gefunden habe, ist, dass ich einen viel grundlegenderen Hintergrund in Mathematik habe und daher nicht weiß, wie ich eine komplexe Reihe fortgeschrittener mathematischer Algorithmen ohne viel Hilfe einfach in Code zerlegen kann.

Für all die Dinge, bei denen ich mit Signalisierung spielen, Werte von Eingaben lesen, Daten an Ausgaben senden und all diese Dinge musste ich konzeptionell wenig anders finden als das, was ich Tag für Tag als Gut mache altmodischer Softwareentwickler. Software zu schreiben ist wirklich das, was es ist. Wenn Sie über die eigentliche Software hinausgehen müssen, werden die Dinge schwierig, weil ich nicht das Wissen habe, direkt mit der Hardware zu spielen. Dies geschieht normalerweise, wenn versucht wird, Code zu debuggen oder zu testen. Wenn Sie über eine wirklich großartige Toolkette verfügen, verfügen Sie möglicherweise über eine integrierte Debugging- und Simulationsumgebung, um die meisten Probleme zu lösen. Trotz alledem müssen Sie manchmal zu den Grundlagen zurückkehren und Ihren Code testen Eine Art Analysator, und die Realität ist, dass die meisten eingebetteten Plattformen Ihnen nicht den Luxus von mehr als einem einfachen Compiler und dem Ouija-Board eines EE bieten, um Ihnen zu helfen.

Aus dieser Perspektive denke ich nicht, dass es für die eingebettete Programmierung wichtig ist, Elektrotechniker zu sein, wenn die Aufgaben einfach sind und die tatsächlichen hardwarespezifischen Anforderungen minimal sind. Darüber hinaus denke ich, dass ein EE das Leben in einer eingebetteten Umgebung viel einfacher machen würde, insbesondere wenn echte Wissenschaft erforderlich ist, um herauszufinden, wo die Probleme liegen.

2
S.Robins

Ich habe noch keine Embedded-Programmierung auf Unternehmensebene durchgeführt, aber in meinem Bachelor ging es hauptsächlich um Embedded-Systeme, aus denen ich einige Jahre echte Erfahrung habe. Wir haben C bei Atmel AVR verwendet und einige Texas Instruments-Chips mit VHDL berührt und hatten einige theoretische Dinge zu ARM.

In dem, was wir hatten, waren es ungefähr 50-60 Prozent Programmierung (C), 20 Prozent Planung/Design (UML) und der Rest war physikalische Elektronik (Löten, Messen, Verdrahten, Herstellen von Kabeln usw.). Ich stimme auch zu, dass es sehr interessant und unterhaltsam war, und ich wünschte tatsächlich, ich hätte auch eine Karriere in eingebetteten Systemen. Leider musste ich bei einem sehr kleinen Markt für eingebettete Systeme auf einfaches altes Java EE) zurückgreifen.

Aber ich schweife ab; Ich würde sagen, dass die oben genannten Prozentsätze den realen Jobs ziemlich nahe kommen, da unsere Lehrer ihre eigenen Unternehmen haben und auch erwähnen, dass sie versuchen werden, dies so realistisch wie möglich zu gestalten. Wir hatten sogar zufällige 180-Grad-Drehungen in den Anforderungen während des Projekts, heh heh.

Wie für den Stapel. Wenn Sie sich mit eingebetteter Programmierung auskennen, haben Sie große Chancen, Ihre eigenen und sehr realen Hardwareprodukte zu erstellen, die Sie in realen Werken in Asien hätten herstellen können, und diese dann bei Ihnen vor Ort zu montieren (sei es zu Hause oder in Ihrem eigenen Unternehmen). Es ist sehr interessant! Sie können auch viele Gadgets herstellen, die zu Hause hilfreich sind, z. B. bewegungsgesteuerte Hausbeleuchtung, Timer für eine Kaffeemaschine zur automatischen Vorbereitung Ihres Morgenjoes usw. Aufregendes Zeug!

2
Juha Untinen

Wie alles erfordert es einen ausgewogenen Ansatz. Ich liebe es, bei meiner täglichen Arbeit mit eingebetteten Systemen zu arbeiten. Sie machen mich besser in der Elektrotechnik. Physisches Rechnen und Automatisieren sind sehr aufregend. Auf der anderen Seite ist es fantastisch, Web-Apps zu erstellen und an Cloud Computing zu basteln.

Wenn Sie es richtig machen, wird die Softwareseite nach Möglichkeiten suchen, die Dinge intelligenter und besser zu machen. Die Hardware-Seite von Ihnen wird Sie ressourcenschonend und äußerst effizient halten.

2
mcotton