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'