Hallo Khabrovchanin,
in diesem Artikel möchte ich darüber spekulieren, wie man einen Mikrocontroller-Programmierer entwickelt. Dieser Artikel ist eine kleine Lektüre für diejenigen, die wie ich einmal nicht wussten, wo sie sich in ihrem Beruf weiterentwickeln sollten. Vielleicht können Sie hier etwas Interessantes aufgreifen.
Im Moment arbeite ich seit 3 Jahren als Programmierer und bis vor kurzem habe ich nicht gesehen, was ich als nächstes tun soll. Dann traf ich jedoch eine Person mit mehr als 20 Jahren Erfahrung in der Programmierung eingebetteter Systeme. In der Kommunikation mit ihr identifizierte ich einige Aspekte, in denen Sie sich entwickeln können. Hier möchte ich sie sowie meine persönlichen Erfahrungen teilen. In keinem Fall möchte ich jemanden unterrichten, ich werde nur meine Best Practices teilen, und Sie können selbst entscheiden, ob diese Tipps nützlich sind oder nicht.
Jeden Monat gibt es einen weiteren Artikel für Anfänger mit einer blinkenden LED. Im Gegenzug gibt es einfach keine Artikel für fortgeschrittene Programmierer. Hier möchte ich zeigen, dass die korrekte Programmierung von Mikrocontrollern keine triviale Aufgabe ist. Dies kann nicht in ein paar Jahren gelernt werden. Im Jahr 2020 unterscheidet es sich nicht wesentlich von der Aufgabe, konventionelle Systeme zu programmieren, da MCs immer leistungsfähiger werden. Natürlich spreche ich von Projekten mit einer Million Zeilen oder mehr.
Es scheint, dass sich die Einführung etwas verzögert hat, also komme ich zur Sache. In diesem Artikel wird nur der Aspekt der Programmierung betrachtet, ich gehe nicht auf Schaltkreise ein. Ich habe versucht, die Elemente zu priorisieren, aber der Unterschied zwischen dem ersten und dem letzten ist gering, alle Elemente sind wichtig.
1. Lernen Sie die C ++ - Sprache.
Dies ist ein trivialer Rat, den ich jedoch für angebracht hielt, um ihn hervorzuheben. Tatsache ist, dass fast jeder, den ich kenne, auch jetzt noch in reinem C programmiert. Warum ist das so schlimm? Nach verschiedenen Quellen wird ein Projekt mit mehr als 100.000 Zeilen (was keine große Anzahl ist) in C praktisch nicht mehr unterstützt. Im Jahr 2020 erreichten Compiler für MK einen solchen Grad an Kompilierung des Quellcodes, dass sich der Auspuff von C und C ++ nicht unterscheiden wird. Die Lesbarkeit des Codes wird jedoch völlig anders sein. Klassen, OOP, virtuelle Funktionen, intelligente Zeiger usw. - All dies sind mächtige Assistenten des Programmierers. Leider ist es nicht möglich, ein Buch herauszusuchen und zu empfehlen, da es zu viele davon gibt.
2. Studieren Sie Entwurfsmuster.
Es ist kein Geheimnis, dass das Schreiben eines guten C ++ - Programms immer noch eine Herausforderung ist. Diese Sprache ist zu umfangreich und enthält zu viele Tools. Was ist ein Designmuster? Dies ist eine Art Leitfaden zur Lösung häufig sich wiederholender Aufgaben. Hier kann ich einen Klassiker empfehlen, nämlich die Arbeit der vierköpfigen Bande "Muster objektorientierten Designs Gamma Erich, Helm Richard". Es ist schwer, einen gewöhnlichen C ++ - Programmierer zu finden, der dies nicht gelesen hat. Warum sind wir schlechter?
3. Entdecken Sie die wunderbare Welt von STL
Ich denke, diese Bibliothek braucht keine Einführung. Für diejenigen, die noch nicht wissen, was es ist, ist dies die Standardvorlagenbibliothek. Sie können Ihren Code durch generische Programmierung kürzer und verständlicher machen. Dieses Tool ist bereits in C ++ integriert. Aus einem unbekannten Grund ist es jedoch sehr schwierig, ein Projekt für MK zu finden, in dem es verwendet wird. Obwohl moderne Compiler (das gleiche IAR) dies unterstützen.
4. Fügen Sie Ihren Projekten Komponententests hinzu.
Hier habe ich nichts Besonderes zu schreiben. Es wurden unzählige Werke darüber geschrieben, was es ist und warum. Der Effekt von Unit-Tests und Entwicklung durch Tests ist signifikant. Mit diesen Tests können Sie viele Fehler erkennen, noch bevor die Korrekturen an OT gesendet werden. Darüber hinaus gibt es ein großartiges Buch zu diesem Thema: Jeff Langr - Moderne C ++ - Programmierung mit testgetriebener Entwicklung (2013).
5. Entdecken Sie den Kernel
Obwohl wir verschiedene Mikrocontroller programmieren, haben die meisten von ihnen Kernel der CortexM-Serie. Kernel haben viele verschiedene Funktionen, wie z. B. Bitmasken oder Debug-Timer. All dies kann nützlich sein. Es ist auch nützlich zu wissen, wie ROZ beispielsweise bei einer Unterbrechung gespeichert werden. Hier kann ich „ARM Cortex-M3 Core“ empfehlen. Der komplette Leitfaden von Joseph Yu. "
6. Assembler lernen
Es mag lächerlich erscheinen, aber ich denke, dass es wichtig ist, den Assembler für das Debuggen von Anwendungen zu kennen. Außerdem macht es ziemlich viel Spaß, darüber zu schreiben. Mit Hilfe von Assembler können Sie klar verstehen, was an diesem bestimmten Haltepunkt passiert. Auch hier ist das Buch aus dem vorigen Absatz geeignet.
7. Ein paar Worte zu IDE
Kürzlich habe ich zum VS + VGDB-Bundle gewechselt. Dieses Bundle hat eine Reihe von Vorteilen, und zusammen überwiegen sie den einzigen Vorteil von IAR, die Größe der Binärdatei. In gcc können Sie Flags für erweiterte Warnungen sowie ein Flag setzen, dass die Warnung als Fehler betrachtet werden soll (IAR hat dies übrigens auch). Mit diesem Ansatz hilft Ihnen Ihre IDE selbst dabei, sauber zu codieren. Es gibt einen guten Artikel darüber
.auf habr. Übrigens habe ich solche Unternehmen getroffen, die für eine Testaufgabe (während eines Interviews) verpflichtet sind, Code mit diesen Flags zu schreiben.
Das ist wahrscheinlich alles. Wenn Sie dem Link gefolgt sind, haben Sie hoffentlich gefunden, wonach Sie gesucht haben. Bitte teilen Sie in den Kommentaren mit, welche anderen Entwicklungspfade Embedded-Programmierer haben können.
PS In diesem Artikel werden Dinge nicht erwähnt, z. B. das Programmieren komplexer Peripheriegeräte über Register oder RTOS. Es wird davon ausgegangen, dass der Leser diese Fähigkeiten bereits besitzt oder zumindest über deren Existenz Bescheid weiß.