Ich möchte einige Tipps für diejenigen, die ein guter Embedded-Software-Entwickler werden oder sich in diesem Bereich verbessern möchten.
Was muss ich über Hardware und Software lernen?
Welche Bücher werden am meisten empfohlen? Blogs?
Wie könnte ich am Ende vom Anfänger zum exzellenten Profi werden?
Für Bücher würde ich empfehlen, durch die Geschichte zu graben. Die meisten der heutigen eingebetteten Softwaretechniken stammen aus der jüngsten Vergangenheit.
Übe wie immer täglich.
quelle
Die anderen Antworten sind großartig, aber der größte Unterschied zwischen einem Hobbyisten und einem Profi sollte eine Einstellung zur Qualität sein. Lassen Sie Ihr Projekt also vollständig laufen und hören Sie nicht auf, wenn Sie zu 80% mit einem Projekt fertig sind. Nehmen Sie es den ganzen Weg, beweisen Sie, dass es funktioniert, und dokumentieren Sie es richtig.
Stellen Sie sicher, dass Ihr Code lesbar und wartbar ist.
Und vergiss nicht, auch ein bisschen Spaß zu haben :)
quelle
Abgesehen von der offensichtlichen Tatsache, dass Sie C lernen und mit einigen Entwicklerplatinen beginnen, möchten Sie lernen, Mikrocontroller-Datenblätter zu lesen .
Hersteller fügen Mikrocontrollern immer mehr Funktionen hinzu, die daher immer komplexer werden. Das Datenblatt bietet nicht nur elektrische Eigenschaften (die für den Elektroniker interessanter sind als für den Softwareentwickler), sondern auch eine detaillierte Beschreibung von Registern, Speicherbelegungen usw.
Beim ersten Lesen sieht ein Datenblatt möglicherweise entmutigend aus, versteht sie jedoch nicht kann in der Debugging-Phase zu stärkeren Kopfschmerzen führen.
quelle
'Embedded' ist eine Art geladener Begriff.
In mancher Hinsicht kann jedes System, das für die Ausführung einer einzelnen Anwendung vorgesehen ist, als eingebettetes System bezeichnet werden, sofern bestimmte Hardwarekomponenten gesteuert werden müssen. Sie können einen 400-MHz-PPC604 mit 2 GB RAM, auf dem eine Java-Anwendung über Linux ausgeführt wird, als eingebettetes System bezeichnen, wenn er einen Prozess über lokale E / A-Module steuert. Auf der anderen Seite wäre ein Arduino, auf dem nur eine minimale Netzwerkanwendung ausgeführt wird, kein eingebettetes System. Aber wahrscheinlich lässt "eingebettet" die meisten Leute an Flash-basierte Controller mit nur ein paar hundert Bytes RAM, keinem nennenswerten Betriebssystem und einer Vielzahl von On-Chip-Peripheriegeräten denken.
Davon abgesehen sind die beiden größten Hürden, denen sich nicht-eingebettete Programmierer beim Lernen von eingebetteten Systemen gegenübersehen, wahrscheinlich E / A-Register und Interrupts.
Interrupts sind für nicht eingebettete Programmierer unter Umständen das einfachere Konzept, da die Hauptprobleme bei der parallelen und ereignisgesteuerten Programmierung häufig in Mainstream-Anwendungen auftreten. Was Interrupts zu einem Schmerz macht, ist die Erkenntnis, dass ein System extrem empfindlich auf die Qualität seiner Interrupt-Behandlung reagiert und dass es kompliziert ist, mit Hardware umzugehen, um den Interrupt-Zustand zu beseitigen und sich auf den nächsten einzurichten. Mit einer GUI beendet ein Deadlock nur die Anwendung. Bei einem Interrupt-Handler führt ein Deadlock dazu, dass Ihr gesamtes System gesperrt wird.
E / A-Geräte scheinen der Bereich zu sein, der die meisten Schwierigkeiten verursacht. Für die Uneingeweihten kann es eine Überraschung sein, dass das Lesen dieses Registers hier Auswirkungen auf dieses Register dort hat . Schreiben von Einsen, um Bits zu löschen. Statusbits, die sich beim Lesen eines Datenregisters usw. von selbst löschen. Es gibt so viele Möglichkeiten mit E / A-Hardware, dass es keine allgemeine Regel für den Umgang damit gibt, außer zu lernen, wie man Gerätedatenblätter findet und interpretiert. Wenn Sie einen Gerätetreiber für eine serielle Schnittstelle schreiben, lernen Sie viel über die I / O-Programmierung auf niedriger Ebene.
Es gibt wirklich keinen Ersatz für das Erlernen dieser Dinge, als die Ärmel hochzukrempeln und ein direktes C und / oder eine Assemblersprache auf dem bloßen Metall zu programmieren. Sogar das oben erwähnte Java-basierte eingebettete System benötigt irgendwann einen Gerätetreiber für die E / A, und dies bedeutet letztendlich, dass man sich mit einigem C befasst. Erfahrung ist der beste Lehrer. Suchen Sie sich einen Mikrocontroller aus, seien es MSP430, TMS320, AVR, ARM, PIC, 68HC11, oder was auch immer, finden Sie ein Evaluierungskit und bauen Sie einige Systeme.
quelle
Was Sie hier lernen möchten, ist Assembler für verschiedene Plattformen. C. C und Assembler Interaktion. Verschiedene Tools GCC und Nicht-GCC. Wie man ein Datenblatt / eine Programmierreferenz liest (und erkennt, dass sie alle einige Fehler aufweisen oder irreführend sein können, vertraut ihnen niemals, die Hardware gewinnt über Dokumente) und wie man ein Schema liest oder verwendet. Dies sind normalerweise keine komplizierten Schaltpläne. Einige der Platinen eignen sich gut für die Anbindung an Projekte, dh sie haben keine störenden Abfälle auf der Platine, sondern nur direkten Zugriff auf die E / A-Pins. Aber das ist nicht das Beste zum Lernen. So etwas wie ein StellarisDas Board, das für Projekte schmerzhaft ist, hat viele lustige Dinge an Bord, um eingebettet zu lernen und zu lernen, Treiber auszuleihen / zu verwenden oder eigene aus Datenblättern zu schreiben. Der Atmel AVR Butterfly ist auch eine gute Karte, wenn er noch verfügbar ist. Möglicherweise müssen Sie ihn an Ihren eigenen seriellen Anschluss anlöten, um ihn zu programmieren, oder nur einige Drähte in den Löchern einklemmen. Was es Ihnen gibt, ist ein paar Peripheriegeräte, die Sie programmieren lernen können.
Selbst wenn Sie am Ende eingebettete Arbeit erledigen, bei der Anwendungen mit SDK- oder API-Aufrufen unter Linux oder einem RTOS geschrieben werden (ohne die Hardware zu berühren oder Datenblätter zu lesen), sind Sie mit den oben genannten Kenntnissen dem Rest immer noch einen Schritt voraus.
quelle
Dieser Artikel (automatisch vom Portugiesischen ins Englische übersetzt) bietet einen guten Überblick über die Entwicklung einer Karriere als Entwickler von eingebetteter Software. Hinweis: Das Original ist hier .
Zunächst werden die Wissensbereiche umrissen, die Sie entwickeln müssen:
Es gibt dann die folgenden Tipps zur Beherrschung dieser Bereiche (und entwickelt sie mit weiterem Text, dies sind nur die Überschriften):
quelle
Überlegen Sie zweimal, bevor Sie ein Embedded-Software-Ingenieur werden. Ich hatte Phasen in meiner Karriere. Ich habe in den ersten 5 Jahren Software entwickelt, bin dann zu Vertrieb / Marketing gewechselt, habe das 15 Jahre lang gemacht, habe ein Geschäft über 100 Millionen Dollar geführt und bin jetzt wieder zu Software zurückgekehrt.
Wenn ich nach 15 Jahren wieder zu Software zurückkehre, erinnere ich mich, warum ich überhaupt gegangen bin. Es ist schwer. Es erfordert Konzentration, mehrere Hundert Zeilen Code, die sich berühren, und Sie müssen alles im Gedächtnis behalten. Eingebettet ist besonders schwer.
Sie müssen sich auch selbst verstehen. Wenn Sie im Allgemeinen ein kluger, akribischer und geduldiger Typ sind, würden Sie einen großartigen Ingenieur abgeben. Wenn Sie eine davon vermissen, sind Sie bestenfalls durchschnittlich. Denk darüber nach. Wenn Sie sehr klug und nicht geduldig sind, ist das nicht viel wert, denn egal wie klug Sie sind, gutes Engineering erfordert Geduld und Liebe zum Detail.
Sie müssen sich auch wohl fühlen, wenn Sie die Code-Stunden gleichzeitig betrachten, ohne zu sprechen. Ich beobachte, dass Menschen mit guten sozialen Fähigkeiten dies unerträglich finden.
Wenn das alles klappt, dann lese all diese tollen Bücher, mache die Übungen und du wirst einen tollen Ingenieur machen. Viel Glück
quelle
Alle anderen sagen großartige Dinge. Ich gebe Ihnen also einen allgemeinen Rat: Lesen, lesen, lesen, lesen, lesen, lesen!
Lesen Sie jeden Artikel auf http://embeddedgurus.com. Wenn Sie etwas nicht verstehen, recherchieren Sie es. Wenn Sie in der Erklärung dieser Dinge etwas finden, das Sie nicht verstehen, lesen Sie etwas mehr. Ich bin kurz davor, in eine Embedded-Software-Position einzusteigen, und meine Erfahrung besteht aus einer Handvoll professioneller Projekte in den letzten Jahren und vielem Lesen. Erfahrung lässt Sie Dinge ausprobieren, aber Lesen lässt Sie wissen, ob die Dinge, die Sie ausprobiert haben, vielleicht besser waren, als Sie könnten. Es führt Sie in Konzepte ein, mit denen Sie unter allen Umständen arbeiten können.
Gerade gelesen!
quelle
Werden Sie Experte für C Understand Timer und serielle Kommunikation. Sie sollten sich damit die Hände schmutzig machen. Verstehen Sie RF-Protokolle und passen Sie sie an Ihre Anforderungen an. Probieren Sie Code-Kombinationen beim Debuggen nicht einfach blind aus. Code macht genau das, was Sie ihm sagen. Lesen Sie die Bedienungsanleitung und das Datenblatt und nehmen Sie dann eine Änderung vor, wenn etwas nicht funktioniert. Der einzige Weg, Experte zu werden, ist zu üben. Erstellen Sie weiterhin Anwendungen. Bald wird es zur zweiten Natur.
quelle