Was ist ein guter Starter-Mikroprozessor zum Erlernen der Montage?

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 schicke Sie nur ungern woanders hin, aber wenn Sie an AVRs interessiert sind, müssen Sie über AVRfreaks.net Bescheid wissen .
Ja, ich tendiere zu AVR ... hauptsächlich, weil sie so viele Informationen über sie haben und sie VIEL billiger sind als der TI-MPS430 ...
AVR ist bei Hobbyisten beliebt, aber ich bin mir nicht sicher, wo Sie Ihre Kostendaten herbekommen. Beide Familien haben einige Angebote, die weniger als 1 USD kosten, und andere, die 20 USD kosten.
Nun ... als ich mir den MPS430 ansah, sah es so aus, als ob die Software (Debugger usw.) etwas teuer wäre, wenn sie auf die Entwicklungsplatinen hinzugefügt würden.
Mein Rat ist, wählen Sie MSP430 nicht, wenn Sie ein Anfänger sind. Die offiziellen Tools sind gut, aber der kostenlose Support, den Sie online finden, kann nicht mit PIC/AVR mithalten
Dies ist an dieser Stelle uralt, aber es sollte beachtet werden, dass Arduino AVR ist . Arduino ist nur eine Entwicklungsplattform, die die AVR-Hardware verwendet.

Antworten (11)

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.

@Mark - ARMs sind auch RISC-Prozessoren, der Befehlssatz ist nicht so schlecht. Es ist eigentlich ganz schön gestaltet; Es gibt einige Anweisungen zur Unterscheidung zwischen Userspace und Kernelspace und andere Komplexitäten, aber diese können ignoriert werden, wenn Sie anfangen.
@reemrevnivek Ich habe eher versucht, ihn von der Komplexität des Umgangs mit mehreren Prozessormodi und MMUs wegzulenken, als er mit ASM begann, weshalb ich High-End-ARMs erwähnte. Die Initialisierung und Einrichtung von High-End-ARM-SoCs ist auch wesentlich komplexer als so etwas wie ein AVR/PIC/MSP430.
RISIKO? Ich bin mir nicht sicher, ob ich den Unterschied zwischen dem und den anderen verstehe ... möchten Sie das erklären? Sind die meisten Mikrocontroller nicht RISC? es bedeutet nur weniger Befehlssätze, richtig?
@sauron Ich habe meine Antwort zu "RISC vs CISC" hinzugefügt.
Sind Dinge wie AVRs/PICS normalerweise RISC oder CISC?
@sauron sie sind RISC, ich kenne keine CISC-Kerne in Mikrocontrollern.
@ Mark 8051s sind CISC
Völlig nicht aktuell, aber ich finde das Erlernen von Assembler durch Kompilieren von C sehr schwierig, da Sie im Grunde versuchen, mehr über Aufrufkonventionen zu lernen und wie dieser Compiler asm generiert als der Assembler selbst ...
Ich habe mit dem 68HC12 angefangen! Es gibt wirklich hervorragende Bücher über die 6800-Assemblersprache (die 68HC12 ASM sehr ähnlich ist). Leventhals Text beginnt praktisch ohne Computerkenntnisse.

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.

Ich würde nicht ganz widersprechen, da ich das jetzt erforsche, aber 8-, 16- und 32-Bit-Kerne haben völlig unterschiedliche asm-Strategien.

Ä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 .

Die geringere Anzahl von Registern, die der S08 im Vergleich zum HC11 hat, kann die Dinge im Vorfeld etwas schwieriger machen, da Sie herausfinden müssen, wie der Stack zu viel von allem tut (was später in meinem Labor mit HC11s gelehrt wurde (oder war es 12er)). Als Erweiterung sind AVRs wirklich nett, weil Sie satte 32 Register haben, mit denen Sie spielen können, bevor Sie sich Gedanken über den Stapel machen.
Eigentlich mag ich die Einfachheit des einzelnen Akkus, auch wenn es ein Engpass sein kann. Anstatt den Stapel für temporäre Variablen zu verwenden, finde ich es zunächst einfacher, die 144 Bytes direkter Seitenvariablen zu verwenden, auf die mit kürzeren Anweisungen zugegriffen werden kann (die anderen 112 Bytes der direkten Seite werden für E / A-Register verwendet). Die Verwendung des Stapels (der ablaufinvariante und rekursive Routinen ermöglicht) kann später erlernt werden.
Wurde der HC(S)08 nicht vom HC05 abgeleitet?
@Johan.A Ja, du hast vollkommen Recht. Der HCS08 ist eine erweiterte Version des HC05. Das hätte ich erwähnen sollen. Ich denke, die Ableitung ist so etwas wie 6800 -> 6801 -> 6805 -> HC(S)08. Ich habe viel Assembler-Code für den 6805 geschrieben. Ich habe den HCS08 mit dem 6809 verglichen, um an die anderen Kommentare zum 68HC11 (der ungefähr eine Mikrocontroller-Version des 6809 ist) anzuknüpfen.

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.

Nur für Assembler brauchen Sie nur binutils, zumindest für arm/thumb oder msp430, und Sie können den Assembler und den Linker bauen. Wenn Sie einen C-Compiler wollen, von dem Sie die Assembler-Ausgabe als Lernwerkzeug untersuchen können, benötigen Sie mspgcc4 oder Codesourcery oder verwenden Sie einfach llvm für beide.

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.

Das Monitorprogramm klingt, als wäre es sehr hilfreich. Mit welchem ​​Buch hast du das gelernt? wenn ich fragen darf....
Ich hatte auch Erfahrung mit dem 68HC11 und dem "Überwachungsprogramm", das als Buffalo Monitor bekannt ist . Im Grunde ist es nur ein Programm, das im ROM gespeichert ist und seriell mit Ihrem PC kommuniziert. Sie geben in ein Terminal ein und das Programm interpretiert Ihre Anfragen und gibt Ihnen Informationen zurück. Sie können Speicher auf dem Bildschirm ausgeben, Speicherwerte ändern, Anweisungen schrittweise ausführen usw. Das von uns verwendete Board war dieses . Dieser Controller ist einfach zu erlernen, aber sehr veraltet.
... Das Buch, das wir benutzt haben, war dieses , falls Sie interessiert sind. Ich würde vorschlagen, mit einem moderneren Controller wie AVR zu gehen; ihr Entwicklungsboard kann hier gefunden werden .

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.

Hallo Wouter, schön dich hier zu sehen!

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).

Dies ist nicht wirklich eine Antwort, sondern eher ein Kommentar. Ich würde auch zögern, einem Embedded-C-Programmierer zu vertrauen, der nicht bereit ist, hin und wieder durch Assemblerteile zu stapfen, wenn er versucht, eine Kuriosität im Verhalten eines Projekts zu verstehen.

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).

Ya, das wusste ich, ich weiß nicht, warum ich das nicht gesagt habe. Ich meinte, dass nicht viele Anleitungen darüber sprechen, einen MP und einen Speicher (wie Flash oder Eeprom) usw. anzuschließen ...
Da die meisten Mikroprozessoren jetzt über Cache/Speicher und einige E/A verfügen, ist dies eine sehr verschwommene Linie.
@Sauron - Bist du dir sicher, dass du das wusstest? Du hast wieder MP benutzt; Ein Mikrocontroller (was die korrekte Bezeichnung für einen AVR und 99 % der hier besprochenen Geräte ist) hat fast immer Speicher (sowohl nicht flüchtig, wie EEPROM und Flash, als auch flüchtiges SRAM) an Bord. Lernen Sie, die Onboard-Sachen zu verwenden, bevor Sie sich an Peripheriegeräte wagen.

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.

Der Microchip PIC32 verwendet die MIPS-Architektur und es ist ziemlich einfach, MIPS-Assembler mit C zu mischen.

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

Bitte skizzieren Sie die Hauptmerkmale des Buches und des Programmierers, die das OP dazu bringen würden, genau diese zu verwenden.
es geht darum, einen Mikrocontroller zu verstehen, wie er aus digitalen Systemen entsteht und erklärt die Assemblersprache
Gehen Sie zu dieser Seite j.mp/mpcinterest, um dieses Buch zu bekommen