Also möchte ich Assembly zuerst auf einem MP lernen und dann zu C übergehen (da es so aussieht, als würden die meisten von ihnen das verwenden).
Ich möchte in die Embedded-Programmierung einsteigen, ich liebe Low-Level-C-Zeug (Kernel/Module für Linux habe ich hauptsächlich gemacht), aber ich liebe die Idee, in der Lage zu sein, noch niedrigere Level als das zu programmieren (Mikrocontroller/ Mikroprozessoren).
Ich kenne Arduino, und das ist großartig und alles, aber ich kann nicht viele Ressourcen finden, um Assembly mit ihnen zu verwenden. Atmel AVRs scheinen sehr beliebt (und billig) zu sein, aber wenn es um den eigentlichen Hardwareteil geht (Anschließen an ein Steckbrett usw.), finde ich nicht viele Informationen.
Irgendwelche Vorschläge/Informationen oder Ressourcen, die ihr Jungs/Mädels kennt, lasst es mich bitte wissen.
Bearbeiten: Eine andere Sache: Es scheint, als würden alle Bücher über Mikroprozessoren, die ich lese (normalerweise AVRs), über den Mikroprozessor selbst und seine Programmierung sprechen. Aber ich habe noch kein Buch gesehen, in dem es tatsächlich darum geht, alle Komponenten selbst zu installieren (Mikroprozessor, Speicher, Stromversorgung usw.). Wenn ich etwas finden könnte, das mich durch das führt, wäre ich im Geschäft. (Ich möchte von Grund auf lernen.) Ganz zu schweigen davon, dass ich keine Ahnung habe, wie Sie zwischen ihnen kommunizieren würden.
Ich habe im College auf einem 68HC11 gelernt. Sie sind sehr einfach zu handhaben, aber ehrlich gesagt werden die meisten Mikrocontroller mit geringer Leistung ähnlich sein (AVR, 8051, PIC, MSP430). Der größte Faktor, der die ASM-Programmierung für Mikrocontroller komplexer macht, ist die Anzahl und Art der unterstützten Speicheradressierungsmodi . Sie sollten kompliziertere Geräte wie High-End-ARM-Prozessoren zunächst vermeiden.
Ich würde wahrscheinlich den MSP430 als guten Ausgangspunkt empfehlen. Schreiben Sie vielleicht ein Programm in C und lernen Sie, indem Sie verschiedene Funktionen durch Inline-Assemblierung ersetzen. Beginnen Sie einfach, x + y = z usw.
Nachdem Sie eine Funktion oder einen Algorithmus durch Assembler ersetzt haben, vergleichen und gegenüberstellen, wie Sie ihn codiert haben und was der C-Compiler generiert hat. Dies ist meiner Meinung nach wahrscheinlich eine der besseren Möglichkeiten, Assembler zu lernen und gleichzeitig zu erfahren, wie ein Compiler funktioniert, was für einen eingebetteten Programmierer unglaublich wertvoll ist. Stellen Sie nur sicher, dass Sie zuerst die Optimierungen im C-Compiler deaktivieren, oder Sie werden wahrscheinlich durch den generierten Code des Compilers sehr verwirrt sein. Schalten Sie nach und nach die Optimierungen ein und beobachten Sie, was der Compiler tut.
RISC vs. CISC
RISC bedeutet „Reduced Instruction Set Computing“ und bezieht sich nicht auf einen bestimmten Befehlssatz, sondern nur auf eine Designstrategie, die besagt, dass die CPU einen minimalen Befehlssatz hat. Einige Anweisungen, die jeweils etwas Grundlegendes tun. Es gibt keine streng technische Definition dessen, was es braucht, um „RISC“ zu sein. Andererseits haben CISC-Architekturen viele Anweisungen, aber jede „macht mehr“.
Die beabsichtigten Vorteile von RISC bestehen darin, dass Ihr CPU-Design weniger Transistoren benötigt, was einen geringeren Stromverbrauch (groß für Mikrocontroller), eine billigere Herstellung und höhere Taktraten bedeutet, was zu einer höheren Leistung führt. Geringerer Stromverbrauch und billigere Herstellung sind im Allgemeinen richtig, eine höhere Leistung hat das Ziel aufgrund von Designverbesserungen in CISC-Architekturen nicht wirklich erreicht.
Fast alle CPU-Kerne sind heute RISC- oder „Middle Ground“-Designs. Selbst mit der berühmtesten (oder berüchtigtsten) CISC-Architektur, x86. Moderne x86-CPUs sind intern RISC-ähnliche Kerne mit einem am Frontend angeschraubten Decoder, der x86-Anweisungen in mehrere RISC-ähnliche Anweisungen zerlegt. Ich denke, Intel nennt diese "Micro-Ops".
Was (RISC vs. CISC) in Assembly leichter zu lernen ist, halte ich für einen Wurf. Etwas mit einem RISC-Befehlssatz zu tun, erfordert im Allgemeinen mehr Montagezeilen als dasselbe mit einem CISC-Befehlssatz. Andererseits sind CISC-Befehlssätze aufgrund der größeren Anzahl verfügbarer Befehle komplizierter zu erlernen.
Der Hauptgrund, warum CISC einen schlechten Ruf bekommt, ist, dass x86 bei weitem das häufigste Beispiel ist und es ein bisschen chaotisch ist, damit zu arbeiten. Ich denke, das ist hauptsächlich darauf zurückzuführen, dass der x86-Befehlssatz sehr alt ist und ein halbes Dutzend Mal oder öfter erweitert wurde, während die Abwärtskompatibilität beibehalten wurde. Sogar Ihr 4,5-GHz-Core i7 kann im 286-Modus laufen (und tut dies beim Booten).
Da ARM eine RISC-Architektur ist, würde ich das für mäßig diskutabel halten. Es ist sicherlich eine Load-Store-Architektur. Der Basisbefehlssatz ist RISC-ähnlich, aber in den letzten Überarbeitungen ist der Befehlssatz ziemlich gewachsen, bis zu dem Punkt, an dem ich ihn persönlich eher als Mittelweg zwischen RISC und CISC betrachten würde. Der Thumb-Befehlssatz ist wirklich der "RISCischste" der ARM-Befehlssätze.
Ich denke, dass 8-Bit-PIC-Mikrocontroller aufgrund der reduzierten Anzahl von Anweisungen die beste Wahl sind.
Der Nebeneffekt der reduzierten Anzahl an Anweisungen ist, dass man im Vergleich zu anderen Mikrocontrollern mit mehr Anweisungen das Rad neu erfinden muss.
Aber nachdem Sie mit PIC gelernt haben, können Sie auf andere Mikrocontroller migrieren und sehen, was für Sie besser passt.
Ähnlich wie Marks Vorschlag des 68HC11, ist der Befehlssatz der Freescale 68HCS08-Familie eine abgespeckte Version des Motorola 6809, von dem ich dachte, dass er einen der saubersten 8-Bit-Befehlssätze seiner Zeit hatte. Hier können Sie ein Entwicklungsboard mit Schaltern, LEDs, 3-Achsen-Beschleunigungsmesser und Piezo-Summer für 79 US-Dollar erwerben .
Der msp430-Befehlssatz eignet sich gut zum Erlernen von Assembler. Vermeiden Sie x86. Arm ist ein weiterer guter, hat aber viel mehr Anweisungen und Optionen und ist möglicherweise nicht am besten als erster Befehlssatz geeignet. Daumen ist eine Teilmenge des Arm-Befehlssatzes und nicht schlecht, auf Github habe ich sowohl einen Daumenemulator (Thumbulator) als auch einen msp430-Emulator (nicht so oft getestet wie der Daumen), die Barebones sind, nur der Prozessor und der Speicher und wenig mehr , damit Sie gut sehen können, was vor sich geht. Eine Alternative wäre zum Beispiel qemu, wo die Sichtbarkeit vorhanden, aber viel schwieriger zu erreichen ist, ebenso erfordert es bei einer qemu-ähnlichen Lösung viel mehr Arbeit, bevor Sie herausfinden, ob etwas funktioniert.
Gehen Sie zu mspgcc4.sf.net, um eine Toolchain zu erstellen, und/oder ein Standard-Binutils (./configure --target=msp430 --prefix=/something) in Kombination mit einem Standard-llvm. Sobald Sie für die Hardware bereit sind, kostet ein msp430-Entwicklungsboard weniger als 5 Dollar. Holen Sie sich für Arm-/Daumen-Tools einfach die Lite-Version von Codesourcery. Ein Cortex-m3-Board (Daumen/Daumen2) kostet derzeit etwa 12 Dollar. Ich würde x86 und avr und andere als ersten Befehlssatz vermeiden, Sie werden andere lernen wollen, um gut abgerundet zu sein. Der alte / originale Bildanleitungssatz ist ebenfalls einen Blick wert. Sie könnten an einem Nachmittag selbst einen Simulator dafür schreiben und den Assembler lernen. Ich würde es nicht unbedingt zuerst lernen, es lehrt einige interessante Dinge, ist aber gleichzeitig nicht skalierbar und nicht unbedingt repräsentativ für gemeinsame Merkmale, die Sie in den meisten Befehlssätzen finden. Der msp430 gab mir das Gefühl des pdp11, das der erste Befehlssatz ist, den ich wirklich gelernt habe, beide haben abgerundete, meist orthogonale Funktionen. Sowohl der msp430- als auch der Mikrochip-Pic-Befehlssatz sind bei Wikipedia zumindest als Referenz dokumentiert. Um sich ein vollständiges Bild zu machen, holen Sie sich die Datenblätter / Handbücher der Anbieter, in denen die einzelnen Register- und Adressierungsmodi, Reset / Boot usw. beschrieben werden.
Ich habe auch auf einem 68HC11 im College gelernt. Vielmehr schlagen sie dies gegenüber jeder anderen MPU / MCU vor, ich wollte nur darauf hinweisen, dass das von uns verwendete Entwicklungsboard ein Überwachungsprogramm hatte. Von einem dummen Terminal aus könnten wir also den Code schrittweise durchgehen und die Register untersuchen ... Ich würde vorschlagen, wenn Sie wissen, welcher Prozessor Ihren Anforderungen entspricht, prüfen Sie auch, welche Entwicklungskarten mit einem Überwachungsprogramm verfügbar sind.
Ich unterrichte sowohl PIC (14-Bit-Kern) als auch ARM-Montage. Der PIC-Klasse sage ich, dass sie, sobald sie die Hässlichkeit dieser Architektur gemeistert haben, alles andere annehmen können. Der ARM (nicht der Thumb/Cortex!) ist eine sehr schöne Architektur, um die Montage zu lernen. Wir verwenden ein LPC2148-Board.
Aktualisierung vom 29.12.2019
Ich bin auf Cortex umgestiegen, zuerst auf den LPC1114/820, später auf den Arduino Due. Der Arduino Due ist billig (aus China), leistungsstark, kann mit C, C++, Assembler (und wenn Sie Python wollen) verwendet werden, und wenn Sie das wirklich wollen, können Sie ihn mit der Arduino IDE verwenden. Ich bevorzuge ein eigenes Build-System und freie Wahl des Editors/IDE.
Sind Sie sicher, dass Sie Montage lernen möchten? Kannst du sagen warum? Es ist eine ziemliche Aufgabe und heutzutage immer weniger relevant oder nützlich. Dies ist von einer Person, die darin geschrieben und sogar Programme von Hand zusammengestellt hat (kein Assembler, Linker, nur eine Karte mit dem Befehlssatz).
Ich habe die 16-Bit-PIC-Assemblierung mit einem dsPIC33F gelernt. Die Baugruppe des Prozessors ist ziemlich C-ähnlich, da sie Zeiger und drei Variablenoperationen (z. B. A = B + C) unterstützt, was das Lernen und die Anpassung daran viel einfacher macht.
Sie verwechseln hier Mikrocontroller und Mikroprozessoren. AVR ist eine Mikrocontroller-Reihe von Atmel, kein Mikroprozessor. Ich schlage vor, dass Sie zuerst auf Wikipedia suchen, um die Unterschiede zwischen diesen besser zu verstehen. Grundsätzlich ist ein Mikrocontroller ein mehr oder weniger vollständiges System, während ein Mikroprozessor nur die CPU ist (daher hat ein Mikrocontroller einen Mikroprozessor im Inneren).
An meiner Universität wurde uns neben der Assemblersprache (die beiden gehen offensichtlich Hand in Hand) mit der MIPS- (oder vielleicht DLX- ) Architektur Unterricht in Hardwaredesign/-architektur gegeben. Seitdem habe ich mich in der Schule / Arbeit ein wenig mit PIC- und AVR-Montage beschäftigt, und sie sind sich alle ziemlich ähnlich. Ich denke, die MIPS-Assemblierung war ein großartiger Ausgangspunkt, da die Sprache sehr einfach ist, ebenso wie die Prozessorarchitektur.
Siehe auch: Dieses Buch . Nicht das beste Buch der Welt, aber für viele Universitäten das Standardbuch zum Computerdesign.
Mein Vorschlag ist, dass jeder, der anfangen wird, sich mit Mikrocontrollern und Prozessoren zu beschäftigen, das Buch mit dem Titel "Code the Hidden Language of Computer" lesen sollte, wenn Sie studieren, dass Sie fast Experte für Prozessoren sind und zum Programmieren von AVR besser Poney Prog Programmer und Programm von verwenden atmel studio6.1 von der offiziellen Atmel-Website
Kevin Vermeer
Benutzer3073
Kevin Vermeer
Benutzer3073
Toby Jaffey
sherrelbc