Programmiersprachen für Elektroniker

Ich bin ein Student der Elektronik und Kommunikationstechnik, bevor ich aufs College kam, habe ich mich für Programmierung und Computeranwendungen interessiert. Ich hatte mich darauf konzentriert, Windows-Anwendungen zu entwerfen und ihre Techniken zu lernen, aber jetzt habe ich das Gefühl, dass dies in meinem Bereich nutzlos ist ... Ich muss nicht alles über Informatik und Softwareentwicklung lernen! (Habe ich damit recht?)

Ich kenne VB .Net, C# und C++. Ich habe in meinem Urlaub viel Zeit und möchte daher programmatisch tiefer in den Bereich "Elektronik" einsteigen. Was würdest du also empfehlen zu lernen oder worauf du dich konzentrieren solltest?

Ich möchte diese Sprachen, die beim Programmieren von Mikrocontrollern und anderen integrierten Schaltkreisen verwendet werden. Reicht C++ oder sollte ich auch C beherrschen? Sag mir bitte deine Gedanken.

"Solder" Oder ernsthafter gesagt, einfaches C ist ziemlich traditionell für Support-Tools, obwohl Python derzeit ein bisschen im Trend liegt.

Antworten (10)

Ja, es ist mit ziemlicher Sicherheit ein guter Schritt, C so gut wie möglich zu verwenden (C++ bietet Ihnen einen hilfreichen Ausgangspunkt, obwohl es, wie leftaroundabout anmerkt, noch viel zu lernen gibt, insbesondere die Unterschiede zwischen der Codierung für kleine eingebettete Systeme im Vergleich zum Schreiben für etwas wie Windows), da es allgegenwärtig ist.

Die meisten Mikrocontroller unterhalb einer bestimmten Größe (z. B. PIC, AVR, MSP430 usw.) verwenden C (oder Assembler), da es viele hochwertige (kostenlose und $$-Versionen - z. B. viele kommerzielle Compiler basieren auf dem kostenlosen GCC-Compiler) C-Compiler gibt .
Sie erhalten andere Sprachen wie das ausgezeichnete JAL für PIC (Originalautor Wouter Van Ooijen, der hier Mitglied ist), PICBASIC, Ada-Varianten, aber aufgrund seiner Popularität und der Anzahl verfügbarer Compiler würde ich sagen, dass C die Sprache der Wahl ist für die meisten. Dies bedeutet zwar nicht, dass es die beste Sprache ist, aber die Verwendung der beliebtesten Sprache bringt offensichtliche Vorteile mit sich (Dokumentation, Support, Portabilität, Zusammenarbeit usw.)
. Für die komplexeren und größeren 32-Bit-Mikros wie viele ARM-Varianten gibt es auch C++ und andere Compiler verfügbar.

Ich würde direkt hineinspringen und mir ein paar Entwicklungsboards schnappen und mit dem Codieren beginnen. Sie könnten ein Low-End-8-Bit-Mikro wie das PIC16F (viele Starter-Kits auf Microchip Direct) auswählen.
Ein 16-Bit-Mikro der Mittelklasse wie das PIC24 und auch eine Art C / C ++ / eingebetteter Linux-ARM - der STM32F4 ARM Cortex M4 Discovery ist ein sehr billiges Entwicklungsboard, das sich lohnen könnte.
Auf der Seite der programmierbaren Logik und der Hardwarebeschreibungssprache (HDL - die großen beiden sind Verilog und VHDL) kann es sich auch lohnen, ein FPGA- oder CPLD-Entwicklungsboard von Diglent oder ähnlichem zu erwerben.

Wenn Sie nicht auf ein Entwicklungsboard warten möchten, können Sie MPLAB oder MPLABX herunterladen und den hervorragenden Simulator verwenden, um sich an der PIC-Entwicklung zu versuchen. Dasselbe gilt auch für andere Tools, zum Beispiel können Sie Xilinx ISE Webpack kostenlos herunterladen und HDLs und programmierbares Logikdesign ausprobieren.

PICs mögen billig sein, aber auf die Gefahr hin, einen Flammenkrieg zu beginnen, würde ich behaupten, dass die Verwendung eines PIC als Lernwerkzeug Sie lehrt, PICs zu programmieren, anstatt Ihnen beizubringen, einen Allzweck-Mikrocontroller zu programmieren. Dafür würden MSP, AVR (Arduino), Low-End-ARM-Cortex oder sogar die ehrwürdigen 8051-Prozessoren leichter übertragbare Fähigkeiten bieten.
Vielen Dank ... das war sehr nützlich. Aber um Ihre Antwort zusammenzufassen: Was ich jetzt brauche, ist, weiter an C++ zu arbeiten und C zu beherrschen, Verilog oder VHDL oder beides zu lernen und ein paar Entwicklungsboards zum Üben zu schnappen oder diese Simulatoren einfach als Anfang zu verwenden.
@SirajMuhammad - Ja, das war es, abgesehen davon, dass das Erlernen von Verilog und VHDL wahrscheinlich nicht erforderlich ist, da sie normalerweise zusammen in einem Design verwendet werden können (so können Sie beispielsweise einen Softcore-Prozessor verwenden, der von jemand anderem in VHDL entworfen wurde, in Ihr Verilog-Design, und es wird gut funktionieren), also wählen Sie einfach eine aus.
@Ian - Ich schlage nicht vor, dass es ein PIC sein muss, das ist nur ein Beispiel (daher das "wie ein PIC") Auf jeden Fall, wenn Sie in C programmieren, glaube ich nicht, dass es insgesamt viel gibt Unterschied zwischen den kleinen Mikros da draußen. Natürlich ist es nützlich, ein Mikro wirklich in- und auswendig kennenzulernen (Montage und alles), aber für den Anfang auf einer höheren Ebene sollten die Dinge ziemlich gleich aussehen, nur die Werkzeuge sind anders. Ich denke, es lohnt sich, ein paar auszuprobieren, bevor man sich auf etwas einlässt.
Ein Cortex M3 oder M4 ist ein guter Anfang. Es gibt billige Boards, TI hat gerade ein M4 Launchpad-Board für 4,99 $ herausgebracht, STMicro hat ein Discovery-Board für 15 $. Sie verfügen über eine große Auswahl an Peripheriegeräten, eine USB-Schnittstelle zum direkten Anschluss an einen Host-Computer zum Programmieren und Debuggen und viel CPU (relativ gesehen natürlich). Und wenn Sie am Ende eine verrückte Projektidee haben, gibt es Treiberbibliotheken für PWM-LED-Controller, LCD-Displays, Touchscreens usw. Sie haben auch IDEs gebündelt, damit Sie schnell loslegen können, wenn Sie diesen Weg gehen möchten, und es gibt arm-eabi-gcc, wenn Sie den Unix-Weg gehen möchten.
"sollte nicht zu schwer sein, wenn Sie C++ bereits kennen"? Ich würde dem nicht zustimmen, jemand, der "VB .Net, C♯ und C++" kennt, verwendet wahrscheinlich letzteres in einem ziemlich hochrangigen, objektorientierten RAII-Stil und braucht möglicherweise einige Zeit, um das Handbuch richtig zu verstehen Speicherverwaltung.
@leftaroundabout - fairer Punkt, vielleicht habe ich es zu kurz ausgedrückt - ich meinte nur, dass es dem OP einen guten Ausgangspunkt mit Struktur, Syntax und einem vertrauten Gefühl geben wird, anstatt "von vorne" zu beginnen. Ich stimme zu, dass es noch viel zu lernen gibt, insbesondere in Bezug auf die tatsächliche Verwendung auf speicherbegrenzten eingebetteten Systemen.
@leftaroundabout Es ist nichts falsch daran, objektorientierte Programme zu schreiben, und RAII ist (bei richtiger Verwendung) kostenlos und hilft, viele dumme Fehler zu vermeiden (die beim Lernen unvermeidlich sind).
@Alice genau mein Punkt. Nur weil jemand gut C++ schreiben kann, mit RAII und allem, heißt das nicht, dass er auch in C programmieren kann.

Lernen Sie C und besorgen Sie sich ein billiges Mikrocontroller-Entwicklungsboard, wie ein MSP430 oder ARM Cortex, und schreiben und laden Sie zumindest ein paar C-Programme.

Ich habe einen Abschluss in Informatik und einen Hintergrund in Softwareentwicklung, hauptsächlich C++-Programmierung für Spiele und jetzt iOS-Spiele und -Apps, aber mein letzter Job war ein halbprofessioneller EE-Gig, der mit einer Reihe von Firmware-Programmierungen für ein ARM Cortex M3-System begann , und endete damit, dass ich lernte, wie man ein grundlegendes Schaltungsdesign und Platinenlayout durchführt, und ein paar einfache Platinen entwarf. Also musste ich mich im Grunde als jemand, der für beide Seiten verantwortlich war, mit dem Problem auseinandersetzen, die beste Programmiersprache für die Überbrückung des Hardware-/Software-Designs zu verwenden.

C ist absolut die Sprache, die Sie kennen müssen. Es ist einfach für Leute, die in C++ programmieren und sich eigentlich nie auf den Funktionsumfang von C beschränken müssen, zu sagen, "es ist dasselbe", aber das ist es nicht. Insbesondere die Art und Weise, wie sich C++ entwickelt und Features gesammelt hat, und die Art und Weise, wie Mainstream-C++-Programmierer diese Features verwenden, ist wirklich eine ganz andere Sache, an einer einigermaßen großen C-Anwendung zu arbeiten als an einer C++-Anwendung. Ihr Firmware-SDK wird aus einer Reihe von C-Bibliotheken bestehen, alles andere, was auf eine MCU passt, ist eine C-Bibliothek, jedes Betriebssystem, das auf einer MCU sinnvoll ist, wird in C geschrieben usw. usw.

Da jedoch viele der MCU-Toolchains GCC als Compiler verwenden, steht Ihnen mit ziemlicher Sicherheit ein C++-Compiler zur Verfügung, wenn Sie eine anständige MCU-Familie verwenden. Aber Sie müssen sehr vorsichtig mit den Funktionen sein, die Sie verwenden, insbesondere mit Dingen aus der Standardbibliothek, da es sehr einfach ist, eine Binärdatei zu erhalten, die viel zu groß ist, um auf Ihr Gerät zu passen. Ich denke, es gibt gute Argumente für die Verwendung von C++ auf eingebetteten Geräten, C++ hat einige nette Funktionen, die Müll oder keine Größen- oder Geschwindigkeitseinbußen haben, Sie müssen nur wissen, was Sie tun, und so Code schreiben weiter am C-Stil-Ende des Spektrums als am STL-Ende des Spektrums in Bezug auf die clevere Verwendung von Funktionen.

Achten Sie nicht zu sehr auf Leute, die sagen, dass Sie Lua oder Python auf einer MCU mit dem richtigen eingebetteten Interpreter verwenden können, bla, bla. Das stimmt, ich habe es gemacht und es macht Spaß, aber im Moment ist es eher für Spielzeugprojekte und Sachen, die bei Hack a Day auftauchen. Ich denke, wir werden mehr davon sehen, da Moores Gesetz unerbittlich auf selbst die kleinsten Prozessoren angewendet wird, das ist etwas, das mit Spielen passiert ist, wo früher viel Assembler war, dann haben sie mit C und C++ länger durchgehalten als alle anderen, und jetzt ist alles so schnell, und die Produktivität der Entwickler ist so wichtig, dass viel Entwicklung mit eingebetteten höheren Sprachen oder direkt in einer höheren Sprache erfolgt. Trotzdem wird es einige Jahre dauern, bis Unternehmen Firmware-Programmierer mit Python- und Lua-Hintergrund einstellen.

Verbringen Sie auch nicht zu viel Zeit mit dem Zusammenbau. Es ist nicht schlecht, mit den Konzepten vertraut zu sein, aber es ist unwahrscheinlich, dass Sie viel oder gar keine Assembler-Programmierung durchführen werden. Es gibt so eine konventionelle Weisheit bei Spielen und eingebettet darin, dass es "gut zu wissen" ist, dass Assembler oft von Leuten wiederholt wird, die nicht wirklich in diesen Bereichen arbeiten. Aber in Wirklichkeit ist es sehr unwahrscheinlich, dass Sie überhaupt jemals eine Assembly schreiben werden, und wenn Sie dies tun, werden es wahrscheinlich nur ein paar Zeilen zur Optimierung oder etwas mit der Hardware sein, für die Sie einfach keine API haben (aber Sie werden es tun nachdem Sie eine geschrieben haben, die ein paar Assemblerzeilen umschließt). Ich habe an mehreren Spielen und diesem Board-/Firmware-Designprojekt gearbeitet, und die Gesamtzahl der Montagezeilen, die ich für kommerzielle Projekte geschrieben habe, liegt wahrscheinlich im niedrigen Zehnerbereich. Es'

Es ist erwähnenswert, dass Ihre wenigen Assemblerzeilen wahrscheinlich in Inline-Assembleranweisungen ( asm()) enthalten sein werden, die schön in Ihren C-Code eingebettet sind. Dies ist in jeder Hinsicht eine Gewinnkombination. Hohes Niveau, aber kompakt mit gelegentlichen Einbrüchen in der Montage, wenn beispielsweise das Timing genau richtig sein muss. Die avr-gccToolchain macht dies bereits häufig mit C-Makros, sodass Sie es nie bemerken.
Es ist wahrscheinlich wichtiger, die Assembly LESEN zu können, als sie schreiben zu müssen. Auf diese Weise können Sie verstehen, was der Compiler dem Mikro sagt, und in sehr seltenen Fällen erkennen, wenn der Compiler etwas falsch macht. Sie müssen auch über ein gewisses Assembler-Verständnis verfügen, um das Beste aus Ihren Debug-Tools herauszuholen und die von ihnen bereitgestellten Einzelschrittfunktionen zu verwenden.
Stimme dem auf jeden Fall zu. Ich denke, eine der besten Übungen für einen aufstrebenden Programmierer ist das Schreiben eines Spielzeugsprachen-Compilers und Codegenerators, der zumindest Funktionen, Arrays und Strukturen verarbeitet, um zu lernen, wie ein Stack-Frame aussieht und wie die grundlegenden Elemente einer Programmiersprache in Assembler aussehen .
@Ian - Assembler lesen zu können, ist nutzlos, wenn Sie nicht wissen, wie man es schreibt. Sie müssen es lesen und mit dem vergleichen, was Sie getan hätten, wenn Sie es geschrieben hätten.
@Rocketmagnet - Sie wollen nicht überprüfen, ob der Compiler die effizienteste Assembly-Implementierung generiert hat. Voraussetzung ist, dass Sie in der Lage sind, den generierten Assembler zu lesen und zu überprüfen, ob die Logik des implementierten Codes mit Ihrer Absicht übereinstimmt. Dies ist dasselbe wie die Verwendung anderer menschlicher Sprachen. Ich kann viel mehr Französisch, Deutsch und Latein lesen und verstehen, als ich sprechen oder schreiben kann.
@Ian - Ja, das bin ich. Die Überprüfung auf Korrektheit und Optimalität sind beide wichtig, wie ich in meinem Beitrag erläutert habe. Wenn Ihr C-Compiler suboptimalen Code generiert, werden Sie es einfach nicht wissen und eine teurere MCU kaufen, als Sie benötigen. Ich habe es schon mehrmals gesehen. Selbst sehr erfahrene C- und C++-Programmierer, die keine Embedded-Erfahrung haben, können schrecklich verschwenderischen Code schreiben, weil sie keine Ahnung haben, wie man ihn untersucht. Dies hat beispielsweise zu Problemen mit Echtzeit-Regelkreisen in Robotern geführt, die ewig warten mussten, bis Daten von schlecht codierten MCUs zurückkamen.

Ich stimme allen anderen zu, dass Sie in C sehr kompetent sein müssen.

Ich würde auch empfehlen, mindestens eine Assemblersprache zu lernen. Dadurch werden Sie zu einem viel besseren C-Programmierer. Sie müssen wissen, was unter der Haube vor sich geht, und das gilt in der Embedded-Welt viel mehr als in der PC-Welt.

Wenn Sie den Assembler verstehen, den Ihr C generiert, können Sie optimaleres C in Bezug auf Geschwindigkeit und Kompaktheit schreiben. Schneller Code bedeutet:

  • Sie können eine langsamere, billigere MCU verwenden und einen Konkurrenten unterbieten.
  • Sie können die Taktrate für eine verbesserte EMV-Konformität verringern.
  • In einer Low-Power-Anwendung kann die MCU mehr Zeit im Ruhezustand verbringen, was direkt zu einer längeren Batterielebensdauer führt.

Kompakterer Code bedeutet, dass Sie eine billigere MCU mit weniger Speicher verwenden können. Oder haben Sie Platz für weitere Funktionen.


Die andere Sprache, die Sie vielleicht lernen möchten, ist Verilog . Dies ist eine Hardware-Beschreibungssprache, und sie unterscheidet sich wirklich ziemlich von C, nicht nur in der Art, wie sie aussieht, sondern auch in ihrer Funktionalität. Verilog wird den Weg zur Nutzung sehr leistungsfähiger Chips wie PSoC3 und 5 von Cypress ebnen . Es ist ein Mikrocontroller mit analoger und digitaler reprogrammierbarer Hardware, mit dem Sie einige erstaunliche Dinge tun können, die mit jeder anderen MCU sehr schwierig zu machen sind. Sie werden auch in der Lage sein, FPGA -Design zu machen.

Was meinst du mit "eine Assemblersprache"? Ich weiß, dass es eine Sprache namens Assembly gibt, hat sie Zweige oder so etwas? Können Sie bitte einige nennen? Und vielen Dank für deine Antwort.
Jeder CPU- oder MCU-Typ hat seine eigene Assemblersprache mit unterschiedlichen Anweisungen. Sie sind alle ziemlich ähnlich, aber mit wichtigen Unterschieden. Lernen Sie die Assemblersprache für jede MCU, die Sie verwenden.
Wollte genau das sagen. C und Assembly werden in der Elektroniktechnik am häufigsten verwendet, da Sie sich normalerweise mit Dingen auf niedriger Ebene befassen. Objektorientiert wird nicht wirklich gut genutzt, die Art von Low-Level-Denken, die von C/Assembly kommt, gilt auch für alles andere, womit Sie arbeiten.

Als MSEE, der seit 8 Jahren in der Verteidigungsindustrie arbeitet, kann ich Ihnen sagen, dass es Ihnen nie an Arbeit mangeln wird, wenn Sie verstehen, wie man in LabVIEW (einer grafischen, streng typisierten Datenflusssprache) gut programmiert.

LabVIEW begann als Programmiersprache für Hardware-Ingenieure, das sieht man daran, dass der Code sehr stark an einen Schaltplan erinnert. In den letzten 25 Jahren hat sich LabVIEW jedoch zu einer vollwertigen, funktionsreichen Sprache mit Unterstützung für Objektorientierung und Multithreading entwickelt. Tatsächlich würde ich argumentieren, dass es keine andere Programmiersprache gibt, ob textbasiert oder nicht, die einfacher ist, eine Multithread-Anwendung zu programmieren als LabVIEW; Dies liegt zum großen Teil an seinem Datenflussparadigma. Da die Anzahl der CPU-Kerne weiter zunimmt, wird LabVIEW als Allzwecksprache immer relevanter.

Ein weiterer Vorteil der Kenntnis von LabVIEW besteht darin, dass Sie nur einen Steinwurf von der Programmierung von FPGAs entfernt sind, indem Sie das LabVIEW FPGA-Modul verwenden , das Ihren LabVIEW-Code nimmt und ihn hinter den Kulissen in VHDL konvertiert, bevor er ihn an den Xilinx-Compiler weiterleitet. Sie können Ihre LabVIEW-Kenntnisse auch nutzen, um über das LabVIEW Real-Time Module , das entweder VxWorks oder Phar Lap verwendet , zur Programmierung von Echtzeitcode überzugehen.

Hinweis: Ich bin ein zertifizierter LabVIEW-Entwickler.

Geben Sie hier die Bildbeschreibung ein

Das gesamte Produktions-LabVIEW, das ich gesehen habe, sieht eher so aus: thedailywtf.com/Articles/Labview-Spaghetti.aspx Ich bezweifle nicht, dass es einen starken Arbeitsmarkt für diejenigen gibt, die bereit sind, solchen Code zu pflegen.
@markrages Ich wurde gebeten, Code zu pflegen und/oder zu erweitern, der fast so schlimm war, vielleicht schlimmer, als es auch dynamische VI-Aufrufe und Globals gab. Dieses Problem ist das zweischneidige Schwert von LabVIEW. Einerseits vermarkten sie es als eine Sprache, in der jeder Ingenieur programmieren kann, aber ohne eine solide Grundlage in der Softwarearchitektur erhalten Sie am Ende genau solchen Code. Glücklicherweise hat NI dieses Problem mit LabVIEW 2012 ausreichend angegangen, indem es gut geschriebene und kommentierte Vorlagen für Architekturen bereitstellt, angefangen bei der einfachen Zustandsmaschine bis hin zum komplexen OOP-basierten Akteur-Framework.
@markrages Das Problem ist zweifach. Erstens gibt das Management den Ingenieuren gerade genug Training, um gefährlich zu sein. Ich würde sagen, 9/10 LabVIEW-Programmierer, die ich in meiner Firma getroffen habe und die eine Schulung erhalten haben, haben nur an den ersten beiden Grundkursen teilgenommen, in denen Sie im Wesentlichen nur die Syntax lernen. Zweitens ist LabVIEW zu einer funktionsreichen Sprache geworden, die es mit jeder modernen Sprache von heute aufnehmen kann, weil ihre grafische Verwaltung denkt, dass sie einfach sein muss. Das Management würde niemals einen Softwareingenieur damit beauftragen, eine mittlere bis komplexe Schaltung zu entwerfen, aber sie haben kein Problem damit, einen EE auf ein komplexes Softwareproblem zu werfen, wenn sie "LabVIEW kennen".
@markrages: Gerade als ich daran erinnert wurde, warum ich LabVIEW mag, sah ich Ihren Kommentar und erinnerte mich, warum ich es hasste. Oh, die Stunden der Frustration kamen alle auf einmal zurück.

Wenn Sie Mikrocontroller auf niedriger Ebene programmieren möchten, sollten Sie mit der Programmierung in Assemblersprache vertraut sein (je mehr unterschiedliche Architekturen, desto besser), und ja, Sie werden C viel häufiger verwenden als C++.

Für allgemeine Ingenieurarbeiten werden häufig mathematisch orientierte Sprachen wie Matlab (auch Scilab und GNU Octave) für Modellierung und Prototyping verwendet.

Außerdem sind viele IDEs für Software und Hardware skriptfähig, typischerweise mit TCL oder LUA, daher wäre eine gewisse Vertrautheit mit Skriptsprachen im Allgemeinen (auch Perl, Python, PHP, Javascript usw.) nützlich.

Für das Hardwaredesign benötigen Sie Verilog- und/oder VHDL-Kenntnisse.

Reicht C++? Vielleicht.

Bitte denken Sie daran, dass C in etwa 90-99 % aller mcu:s da draußen verwendet wird, also ist C ein Muss in Ihrem Lebenslauf.

Aber da Sie ein High-Level-Typ sind, könnten Sie anfangen, mit den Arduinos zu spielen, da sie mit einem herunterskalierten C++ programmiert sind, und das würde eine ungefähre Vorstellung davon geben, was C++ in der MCU-Welt im Moment leisten kann.

Für Mikrocontroller (und ich werde nur Mikrocontroller ansprechen) ist C meines Erachtens eine viel bessere Einstiegssprache als C++. Die Assemblierung wäre der nächste Schritt, fantastisch, um Ihnen zu helfen zu verstehen, wie Ihr C-Compiler Sie vermasselt, Fehler verursacht, Takte stiehlt usw. und die beste Leistung aus Ihrer Plattform herausholt. Dies alles setzt voraus, dass Sie von einem Mikrocontroller sprechen - nicht von einem Arduino, BASIC Stamp oder einer anderen Plattform mit einem verpackten Mikrocontroller.

Schwer zu sagen, was für "Ihr Fachgebiet" nützlich ist -- und darauf hinzuweisen, dass Sie als Student vielleicht noch nicht wirklich wissen, was Ihr Fachgebiet ist!! -- aber ich denke, dass Ihr Sprachsatz ziemlich vernünftig erscheint und Sie ihn immer wieder verwenden werden. Wenn Sie eine strukturierte Sprache gut im Griff haben, ist die nächste zumindest viel einfacher, aber ich denke, Sie werden Ihre Windows-Programmierkenntnisse immer gut in der Tasche haben.

Sie könnten C und die Art von Assembler-Code lernen, der von C-Anweisungen generiert wird, wenn Sie mit Prozessoren arbeiten, aber Sie sollten sich auch beibringen, wie man eine Unix-Befehlszeilen-Shell wie bash und die dazugehörigen Tools wie sed verwendet. ed, awk, vim/vi, find, tar, gzip, ... sowie Python, das Sie auf vielen Plattformen verwenden können und eine gute Möglichkeit sind, "Dinge zu erledigen".

Sie müssen C lernen, wenn Sie ein ernsthafter Embedded-Entwickler werden wollen. Assembler sollten Sie auch kennen, auch wenn Sie es wahrscheinlich sehr selten benutzen werden.

Ich definiere Elektronikingenieur zunächst als jemanden, der am Hardwaredesign von der Firmware über das Platinendesign bis hin zum Chipdesign beteiligt ist. In einigen Fällen werden Sie Firmware erstellen, wie oben erwähnt, benötigen Sie "C". Tiefergehend wird Software einfach zu einem Werkzeug, das Verständnis einiger Konzepte der Informatik in komplementären Sprachen von C/C++ bis hin zu Lisp-ähnlichen Sprachen wird wichtiger sein als Einzelheiten. Sie benötigen Software zur Unterstützung Ihrer Designbemühungen, aber das hat keinen Vorrang vor dem Verständnis der grundlegenden Grenzen dessen, was in einer physischen Implementierung getan werden kann. Digitales Design ist NICHT Verilog/VHDL, selbst wenn das Design in diesen Sprachen ausgedrückt wird. Im vollständig benutzerdefinierten und in-silico-Design sehen Sie Lisp-ähnliche Sprachen und C-funktionale Sprachen.