Programmiersprachen für Elektroniker

22

Ich bin Student der Elektrotechnik und Nachrichtentechnik und habe mich vor meinem College für Programmierung und Computeranwendungen interessiert. Ich hatte mich auf das Entwerfen von Windows-Anwendungen und das Erlernen ihrer Techniken konzentriert, aber jetzt habe ich das Gefühl, dass dies auf meinem Gebiet nutzlos ist ... Ich muss nicht alles über Informatik und das Entwickeln von Software lernen! (Habe ich recht damit?)

Ich kenne VB .Net, C # und C ++. Ich habe viel Zeit in meinem Urlaub, deshalb möchte ich programmatisch tiefer in den Bereich "Elektronik" eintauchen. Was würden Sie also empfehlen, um zu lernen oder sich darauf zu konzentrieren?

Ich möchte, dass diese Sprachen bei der Programmierung von Mikrocontrollern und anderen integrierten Schaltkreisen verwendet werden. Ist C ++ genug oder sollte ich auch C beherrschen? Sag mir bitte deine Gedanken.

Siraj Muhammad
quelle
3
"Löten" Oder im Ernst, C ist für Support-Tools ziemlich traditionell, obwohl Python derzeit etwas im Trend liegt.
Chris Stratton

Antworten:

29

Ja, es ist mit ziemlicher Sicherheit eine gute Idee , den Umgang mit C so gut wie möglich zu lernen noch , noch viel zu gibt, insbesondere die Unterschiede zwischen der Codierung für kleine eingebettete Systeme verglichen mit dem Schreiben für etwas wie Windows), da es allgegenwärtig ist.

Die meisten Mikrocontroller unter 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 auch andere Sprachen wie die exzellente JAL für PIC (Originalautor Wouter Van Ooijen, der hier Mitglied ist), PICBASIC und Ada-Varianten, aber aufgrund der Popularität und der Anzahl der verfügbaren Compiler würde ich sagen, dass C die Sprache der Wahl ist für die meisten. Dies bedeutet sicherlich nicht, dass es die beste Sprache ist. Die Verwendung der beliebtesten Sprache bietet jedoch offensichtliche Vorteile (Dokumentation, Support, Portabilität, Zusammenarbeit usw.).
Für die komplexeren und größeren 32-Bit-Mikros wie viele ARM-Varianten gibt es auch einige C ++ und andere Compiler verfügbar.

Ich sprang sofort ein, schnappte mir ein paar Entwicklungsboards und holte mir die Codierung. Sie könnten ein 8-Bit-Mikro der unteren Preisklasse wie das PIC16F (viele Starter-Kits auf Microchip Direct),
ein 16-Bit-Mikro der mittleren Preisklasse wie das PIC24 und eine Art C / C ++ / Embedded-Linux-ARM - das STM32F4 - auswählen ARM Cortex M4 Discovery ist ein sehr billiges Entwicklungsboard, das es wert sein könnte, gekauft zu werden.
Auf der Seite der programmierbaren Logik- und Hardwarebeschreibungssprache (HDL - die beiden großen 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. Gleiches gilt auch für andere Tools, zum Beispiel können Sie Xilinx ISE Webpack kostenlos herunterladen und HDLs und programmierbares Logikdesign ausprobieren.

Oli Glaser
quelle
9
PICs mögen billig sein, aber mit der Gefahr, einen Flammenkrieg auszulösen, würde ich behaupten, dass die Verwendung eines PIC als Lernwerkzeug Ihnen das Programmieren von PICs lehrt, anstatt Ihnen das Programmieren eines Universal-Mikrocontrollers beizubringen. Hierfür bieten MSP, AVR (Arduino), Low-End-ARM-Cortex oder sogar die ehrwürdigen 8051-Prozessoren leichter übertragbare Fähigkeiten.
uɐɪ
Vielen Dank ... das war sehr nützlich. 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 Entwickler-Boards zum Üben zu nehmen oder diese Simulatoren einfach als Anfang zu verwenden.
Siraj Muhammad
1
@SirajMuhammad - Ja, das war's auch schon. Abgesehen davon, dass Sie Verilog und VHDL nicht lernen müssen, können diese normalerweise zusammen in einem Design verwendet werden (zum Beispiel können Sie einen von jemand anderem in VHDL entwickelten Softcore-Prozessor verwenden, in Ihr Verilog-Design, und es wird gut funktionieren.
Oli Glaser
4
@Ian - Ich schlage nicht vor es hat ein PIC sein, dass nur ein Beispiel ist (daher die „wie ein PIC“) Auf jedem Fall, wenn Sie in C programmieren, ich glaube nicht , dass es viel von einer insgesamt ist Unterschied zwischen den kleinen Mikros da draußen. Natürlich ist es nützlich, ein Mikro von innen nach außen kennenzulernen (Zusammenbau und alles), aber für den Einstieg auf einer höheren Ebene sollten die Dinge ähnlich aussehen, nur die Werkzeuge sollten sich unterscheiden. Ich denke, es lohnt sich, ein paar zu probieren, bevor Sie sich auf irgendetwas festlegen.
Oli Glaser
2
msgstr "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 letzteres wahrscheinlich in einem eher objektorientierten RAII-Stil auf hoher Ebene und benötigt möglicherweise einige Zeit, um das Handbuch richtig zu verstehen Speicherverwaltung.
links ungefähr
23

Lernen Sie C und kaufen Sie sich ein günstiges Mikrocontroller-Entwicklungsboard wie ein MSP430 oder ARM Cortex, und schreiben und laden Sie mindestens einige 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 Semi-Pro-EE-Auftritt, der mit einer Reihe von Firmware-Programmierungen für ein ARM Cortex M3-System begann und dann lernte ich, wie man einige grundlegende Schaltungsentwürfe und Platinenlayouts durchführt und ein paar einfache Platinen entwirft. Ich musste mich also grundsätzlich mit dem Problem auseinandersetzen, die beste Programmiersprache für die Überbrückung des Hardware- / Software-Designs zu verwenden, als jemand, der für beide Seiten verantwortlich war.

C ist absolut die Sprache, die Sie kennen müssen. Es ist einfach für Leute, die in C ++ programmieren und sich nie auf den Funktionsumfang von C beschränken müssen, um zu sagen, dass es dasselbe ist, aber nicht. Insbesondere die Art und Weise, in der C ++ Funktionen entwickelt und gesammelt hat, und die Art und Weise, in der C ++ - Programmierer diese Funktionen verwenden, unterscheidet sich erheblich von der Arbeit mit einer relativ großen C-Anwendung. Ihr Firmware-SDK besteht aus einer Reihe von C-Bibliotheken, alles andere, was auf eine MCU passt, ist eine C-Bibliothek, jedes Betriebssystem, das auf einer MCU Sinn macht, ist in C usw. usw. geschrieben.

Da 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. Sie müssen jedoch sehr vorsichtig mit den von Ihnen verwendeten Funktionen sein, 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 ein gutes Argument 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 aufweisen. Sie müssen nur wissen, was Sie tun, und Code so 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. Das stimmt, ich habe es geschafft und es macht Spaß, aber im Moment ist es mehr für Spielzeugprojekte und Dinge, die bei Hack a Day auftauchen. Ich denke, wir werden mehr davon sehen, da Moores Gesetz unerbittlich auch auf die kleinsten Prozessoren angewendet wird. Dies ist etwas, was bei Spielen passiert ist, bei denen es früher viel Assembler gab, und die dann mit C und C ++ länger durchgehalten haben als alle anderen, und jetzt ist alles so schnell und die Entwicklerproduktivität so wichtig, dass viel mit eingebetteten höheren Sprachen oder direkt in einer höheren Sprache entwickelt wird. Dennoch wird es einige Jahre dauern, bis Unternehmen Firmware-Programmierer mit Python- und Lua-Hintergrund einstellen.

Verbringen Sie auch nicht zu viel Zeit mit der Montage. Es ist nicht schlecht, mit den Konzepten vertraut zu sein, aber es ist unwahrscheinlich, dass Sie viel tun, wenn überhaupt eine Baugruppenprogrammierung. Es gibt diese konventionelle Weisheit mit Spielen und eingebettet, dass es "gut zu wissen" ist, was oft von Leuten wiederholt wird, die in diesen Bereichen nicht wirklich arbeiten. In Wirklichkeit ist es jedoch sehr unwahrscheinlich, dass Sie jemals eine Assembly schreiben werden, und wenn Sie dies tun, sind es wahrscheinlich nur ein paar Zeilen zur Optimierung oder etwas mit der Hardware, für die Sie einfach keine API haben (aber Sie werden es tun) nachdem Sie eine geschrieben haben, die einige Zeilen der Assemblierung umschließt). Ich habe an mehreren Spielen und dem Board- / Firmware-Designprojekt gearbeitet, und die Gesamtzahl der Assembler-Zeilen, die ich für kommerzielle Projekte geschrieben habe, ist wahrscheinlich im Teenageralter. Es'

Suboptimus
quelle
1
Es ist anzumerken, dass sich Ihre wenigen Assembly-Zeilen wahrscheinlich in Inline-Assembly-Anweisungen ( asm()) befinden, die gut in Ihren C-Code eingebettet sind. Dies ist in jeder Hinsicht eine gewinnbringende Kombination. Hochwertig, aber kompakt mit gelegentlichem Eintauchen in die 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.
Alexios
9
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 anordnet, und in sehr seltenen Fällen erkennen, wenn der Compiler etwas falsch macht. Sie benötigen auch ein gewisses Assembly-Verständnis, um Ihre Debug-Tools optimal nutzen und die darin enthaltenen Einzelschrittfunktionen nutzen zu können.
uɐɪ
1
Stimme dem definitiv zu. Ich denke, eine der besten Übungen für angehende Programmierer ist das Schreiben eines Compilers und Codegenerators für Spielzeugsprachen, der zumindest Funktionen, Arrays und Strukturen verarbeitet, um zu lernen, wie ein Stapelrahmen aussieht und wie die Grundelemente einer Programmiersprache in Assembler aussehen .
Suboptimus
3
@ 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
2
@Rocketmagnet - Sie möchten nicht überprüfen, ob der Compiler die effizienteste Assemblyimplementierung generiert hat. Voraussetzung ist, dass Sie den generierten Assembler lesen und überprüfen können, ob die Logik des implementierten Codes mit Ihrer Absicht übereinstimmt. Dies ist dasselbe wie die Verwendung anderer menschlicher Sprachen. Ich kann weit mehr Französisch, Deutsch und Latein lesen und verstehen, als ich sprechen oder schreiben kann.
uɐɪ
10

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

Ich würde auch empfehlen, mindestens eine Assemblersprache zu lernen. Auf diese Weise werden Sie ein viel besserer C-Programmierer. Sie müssen wissen, was unter der Haube vor sich geht, und dies gilt in der Embedded-Welt viel mehr als in der PC-Welt.

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

  • Sie können eine langsamere, billigere MCU verwenden und einen Konkurrenten unterbieten.
  • Sie können die Taktrate verringern, um die EMV-Konformität zu verbessern.
  • In einer Niedrigleistungsanwendung kann die MCU mehr Zeit im Schlaf 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 mehr Funktionen.


Die andere Sprache, die Sie vielleicht lernen möchten, ist Verilog . Dies ist eine Hardwarebeschreibungssprache und unterscheidet sich von C nicht nur in der Darstellung, sondern auch in der Funktionalität. Verilog eröffnet die Möglichkeit, sehr leistungsstarke Chips wie die Cypress PSoC3 und 5 zu nutzen . Es ist ein Mikrocontroller mit analoger und digital umprogrammierbarer Hardware, mit dem Sie einige erstaunliche Dinge tun können, die mit keiner anderen MCU sehr schwierig zu tun sind. Sie können auch FPGAs entwerfen.

Raketenmagnet
quelle
Was meinen Sie mit "einer Assemblersprache"? Ich weiß, dass es eine Sprache gibt, die Versammlung heißt. Hat sie Zweige oder so etwas? Kannst du bitte welche nennen? Und vielen Dank für Ihre Antwort.
Siraj Muhammad
4
Jeder CPU- oder MCU-Typ verfügt über eine eigene Assemblersprache mit unterschiedlichen Anweisungen. Sie sind alle ziemlich ähnlich, aber mit wichtigen Unterschieden. Lernen Sie die Assemblersprache für die von Ihnen verwendete MCU.
Rocketmagnet
1
Wollte genau das sagen. C und Assembly werden in der Elektrotechnik am häufigsten verwendet, da es sich normalerweise um einfache Dinge handelt. Objektorientiert ist nicht wirklich gut genutzt, die Art des Denkens auf niedriger Ebene, die von C / Assembly ausgeht, wird auch auf alles angewendet, mit dem Sie arbeiten.
Muz
9

Als MSEE, der seit 8 Jahren in der Verteidigungsbranche tätig ist, kann ich Ihnen sagen, dass es Ihnen nie an Arbeit mangelt, wenn Sie wissen , wie man in LabVIEW (einer grafischen, streng typisierten Datenflusssprache) gut programmiert .

LabVIEW war ursprünglich eine Programmiersprache für Hardware-Ingenieure. Dies lässt sich daran erkennen, dass der Code einem Schaltplan sehr ähnlich sieht. In den letzten 25 Jahren hat sich LabVIEW jedoch zu einer umfassenden, funktionsreichen Sprache entwickelt, die Objektorientierung und Multithreading unterstützt. Tatsächlich würde ich behaupten, dass es keine andere Programmiersprache gibt, die auf Text basiert oder auf andere Weise, mit der sich eine Multithread-Anwendung einfacher programmieren lässt als mit LabVIEW. Dies ist zum großen Teil auf das Datenfluss-Paradigma zurückzuführen. Da die Anzahl der CPU-Kerne weiter zunimmt, wird LabVIEW als Allzwecksprache immer relevanter.

Ein weiterer Vorteil von LabVIEW ist, dass Sie nur einen Steinwurf von der Programmierung von FPGAs mit dem LabVIEW-FPGA-Modul entfernt sind, das Ihren LabVIEW-Code hinter den Kulissen in VHDL konvertiert, bevor er an den Xilinx-Compiler übergeben wird. Sie können Ihre LabVIEW-Kenntnisse auch nutzen, um über das LabVIEW-Echtzeitmodul , das entweder VxWorks oder Phar Lap verwendet, zur Programmierung von Echtzeitcode überzugehen.

Hinweis: Ich bin zertifizierter LabVIEW-Entwickler.

Bildbeschreibung hier eingeben

SiegeX
quelle
5
Die gesamte Produktion von LabVIEW sieht ungefähr 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 beizubehalten.
Markrages
@markrages Ich wurde gebeten, Code zu pflegen und / oder zu erweitern, der fast so schlimm war, vielleicht sogar noch schlimmer, als es 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. Ohne eine solide Grundlage in der Softwarearchitektur erhalten Sie jedoch Code wie diesen. Zum Glück hat NI dieses Problem mit LabVIEW 2012 ausreichend angegangen und gut geschriebene und kommentierte Vorlagen für Architekturen bereitgestellt, angefangen von der einfachen Zustandsmaschine bis hin zum komplexen OOP-basierten Akteur-Framework.
SiegeX
@ markrages Das Problem ist zweifach. Erstens bietet das Management den Ingenieuren gerade genug Schulungen, um gefährlich zu sein. Ich würde sagen, 9/10 LabVIEW-Programmierer, die ich in meiner Firma getroffen habe und die erst die ersten beiden Grundkurse besucht haben, in denen Sie im Wesentlichen nur die Syntax lernen. Zweitens ist LabVIEW zu einer funktionsreichen Sprache geworden, die mit jeder modernen Sprache mithalten kann, da die grafische Verwaltung dies für einfach hält. Managemnt würde niemals einen Softwareentwickler damit beauftragen, eine mittlere bis komplexe Schaltung zu entwerfen. Sie haben jedoch kein Problem damit, einen EE auf ein komplexes Softwareproblem aufmerksam zu machen, wenn sie LabVIEW
SiegeX 19.09.12
@markrages: Genau als ich daran erinnert wurde, warum ich LabVIEW mochte, habe ich Ihren Kommentar gesehen und mich daran erinnert, warum ich ihn hasste. Oh, die Stunden der Frustration kehrten alle auf einmal zurück.
Jonny B Good
6

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

Für allgemeine Ingenieurarbeiten werden üblicherweise mathematisch orientierte Sprachen wie Matlab (auch Scilab und GNU Octave) für die Modellierung und das Prototyping verwendet.

Außerdem sind viele IDEs für Software und Hardware skriptfähig, in der Regel unter Verwendung von TCL oder LUA. Daher wäre eine gewisse Kenntnis der Skriptsprachen im Allgemeinen (auch Perl, Python, PHP, Javascript usw.) hilfreich.

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

Dave Tweed
quelle
6

Ist C ++ genug? Vielleicht.

Bitte denken Sie daran, dass C in so etwas wie 90-99% aller mcu: s verwendet wird, also ist C ein Muss in Ihrem Lebenslauf.

Aber da Sie ein High-Level-Typ sind, könnten Sie anfangen, mit den Arduino zu spielen, da sie mit einem verkleinerten C ++ programmiert sind, und das würde eine ungefähre Vorstellung davon geben, was C ++ in der mcu-Welt derzeit tun kann.

Johan
quelle
3

Für Mikrocontroller (und ich werde mich nur mit Mikrocontrollern befassen) halte ich C für eine viel bessere Eingabesprache als C ++. Assemblierung wäre der nächste Schritt, um Ihnen zu zeigen, wie Ihr C-Compiler Sie überlistet, Fehler verursacht, Uhrzecken stiehlt usw. und die beste Leistung aus Ihrer Plattform herausholt. Dies alles setzt voraus, dass es sich um einen Mikrocontroller handelt - nicht um ein Arduino, einen BASIC Stamp oder eine andere Plattform, die einen integrierten Mikrocontroller umfasst.

Schwer zu sagen, was für "Ihr Fachgebiet" nützlich ist - und legen nahe, dass Sie als Student möglicherweise noch nicht wirklich wissen, was Ihr Fachgebiet ist !! - aber ich denke, dass Ihre Spracheinstellung ziemlich vernünftig erscheint und Sie werden feststellen, dass Sie sie immer und immer wieder verwenden. Wenn Sie eine strukturierte Sprache gut beherrschen, wird die nächste um einiges einfacher, aber ich denke, dass Sie Ihre Windows-Programmierkenntnisse immer gut in der Tasche haben.

Scott Seidman
quelle
2

Sie könnten C und die Art des Assembler-Codes lernen, der von C-Anweisungen generiert wird, wenn Sie mit Prozessoren arbeiten. Sie sollten sich jedoch auch selbst 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 auf vielen Plattformen verwendet werden kann und ein guter Weg ist, um "Dinge zu erledigen".

Paddy3118
quelle
2

Sie müssen C lernen, wenn Sie ein ernsthafter Embedded-Entwickler sein möchten. Sie sollten Assembler auch kennen, obwohl Sie es wahrscheinlich sehr selten verwenden werden.

mjh2007
quelle
0

Unter Elektronikingenieur werde ich zunächst jemanden verstehen, der mit Hardware-Design von der Firmware über das Board-Design bis hin zum Chip-Design befasst ist. In einigen Fällen werden Sie Firmware ausführen, wie oben angegeben, benötigen Sie "C". Tiefer gehende Software wird einfach zu einem Werkzeug. Das Verstehen einiger comp-sci-Konzepte in komplementären Sprachen von C / C ++ bis Lisp wird wichtiger sein als bestimmte Sprachen. Sie benötigen Software, um Ihre Konstruktionsbemühungen zu unterstützen, aber dies hat keinen Vorrang vor dem Verständnis der grundlegenden Grenzen dessen, was bei einer physischen Implementierung getan werden kann. Digitales Design ist NICHT Verilog / VHDL, auch wenn das Design in diesen Sprachen ausgedrückt wird. Bei vollständigem Custom- und In-Silico-Design sehen Sie Lisp-ähnliche Sprachen und C - funktionale Sprachen.

Platzhalter
quelle