Was ist ein guter Starter-Mikroprozessor, um die Montage zu lernen?

19

Ich möchte also zuerst Assembly auf einem MP lernen und dann zu C übergehen (da es so scheint, als ob die meisten von ihnen dies verwenden).

Ich möchte in die Embedded-Programmierung einsteigen, ich liebe Low-Level-C-Zeug (Kernel / Module für Linux sind hauptsächlich das, was ich getan habe), aber ich liebe die Idee, noch niedrigere Level programmieren zu können (Microcontroller / Mikroprozessoren).

Ich kenne Arduino und das ist großartig, 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 tatsächlichen Hardwareteil geht (sie an ein Steckbrett anschließen usw.), finde ich nicht viele Informationen.

Alle Vorschläge / Informationen oder Ressourcen, die Sie Jungs / Mädels kennen, lassen Sie es mich wissen.

Bearbeiten: Eine andere Sache: Es scheint, als ob alle Bücher über Mikroprozessoren, die ich gelesen habe (normalerweise AVRs), über den Mikroprozessor selbst und dessen Programmierung sprechen. Aber ich habe noch kein Buch gesehen, in dem es darum geht, alle Komponenten (Mikroprozessor, Speicher, Stromversorgung usw.) selbst zu installieren. 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.

ctype.h
quelle
3
Ich hasse es, Sie woanders hin zu schicken, aber wenn Sie an AVRs interessiert sind, müssen Sie AVRfreaks.net kennen .
Kevin Vermeer
Ya Ich neige zu AVR ... vor allem, weil sie so viele Informationen über sie, und sie sind viel billiger als der TI-MPS430 ...
2
AVR ist bei Hobbyisten beliebt, aber ich bin mir nicht sicher, woher Sie Ihre Kostendaten beziehen. Beide Familien haben einige Angebote, die weniger als 1 USD sind und andere, die 20 USD drücken.
Kevin Vermeer
Naja ... als ich mir das MPS430 ansah, sah es so aus, als ob die Software (Debugger usw.) ein bisschen teuer wäre, wenn sie auf die Entwicklungsplatinen gesteckt wurde.
1
Mein Rat ist, nicht MSP430 zu wählen, wenn Sie ein Anfänger sind. Die offiziellen Tools sind gut, aber der kostenlose Online-Support entspricht nicht PIC / AVR
Toby Jaffey

Antworten:

14

Ich habe auf einem 68HC11 im College gelernt. Sie sind sehr einfach zu handhaben, aber die meisten Mikrocontroller mit niedriger Leistung sind ähnlich (AVR, 8051, PIC, MSP430). Die größte Sache , die Komplexität zu ASM Programmierung für Mikrocontroller hinzufügen wird , ist die Anzahl und Art der unterstützten Speicheradressierungsart . Sie sollten zunächst kompliziertere Geräte wie ARM-Prozessoren vermeiden.

Ich würde den MSP430 wahrscheinlich als guten Ausgangspunkt empfehlen. Schreiben Sie vielleicht ein Programm in C und lernen Sie, indem Sie verschiedene Funktionen durch Inline-Assemblierung ersetzen. Fange einfach an, x + y = z, etc.

Nachdem Sie eine Funktion oder einen Algorithmus durch Assembly ersetzt haben, vergleichen und vergleichen Sie, wie Sie sie 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 lernen, wie ein Compiler funktioniert, der als eingebetteter Programmierer unglaublich wertvoll ist. Stellen Sie nur sicher, dass Sie Optimierungen im C-Compiler zuerst deaktivieren, da Sie sonst vom generierten Code des Compilers sehr verwirrt sind. Aktivieren Sie nach und nach Optimierungen und notieren Sie, was der Compiler tut.

RISC gegen CISC

RISC bedeutet "Reduced Instruction Set Computing" und bezieht sich nicht auf einen bestimmten Befehlssatz, sondern nur auf eine Entwurfsstrategie, die besagt, dass die CPU nur über einen minimalen Befehlssatz verfügt. Nur wenige Anweisungen, die jeweils etwas Grundlegendes tun. Dies ist keine strenge technische Definition dessen, was es heißt, RISC zu sein. Auf der anderen Seite haben CISC-Architekturen viele Anweisungen, aber jede tut mehr.

Die beabsichtigten Vorteile von RISC sind, dass Ihr CPU-Design weniger Transistoren benötigt, was einen geringeren Stromverbrauch bedeutet (groß für Mikrocontroller), kostengünstiger und höhere Taktraten, was zu einer höheren Leistung führt. Ein geringerer Stromverbrauch und eine billigere Herstellung sind in der Regel zutreffend. Eine höhere Leistung wurde aufgrund von Designverbesserungen in CISC-Architekturen nicht wirklich dem Ziel gerecht.

Fast alle CPU-Kerne sind heutzutage RISC- oder Middle-Ground-Designs. Selbst mit der berühmtesten (oder berüchtigtsten) CISC-Architektur, x86. Moderne x86-CPUs sind interne RISC-ähnliche Kerne mit einem am Frontend verschraubten Decoder, der x86-Anweisungen in mehrere RISC-ähnliche Anweisungen aufteilt. Ich denke, Intel nennt diese "Micro-Ops".

Was (RISC vs CISC) in der Montage leichter zu lernen ist, halte ich für einen Fehler. Um etwas mit einem RISC-Befehlssatz zu tun, sind im Allgemeinen mehr Assemblierungszeilen erforderlich als mit einem CISC-Befehlssatz. Andererseits ist das Erlernen von CISC-Anweisungssätzen aufgrund der größeren Anzahl verfügbarer Anweisungen komplizierter.

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 liegt hauptsächlich daran, 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 ausgeführt werden (und zwar beim Booten).

Was ARM als RISC-Architektur betrifft, würde ich dies als mäßig umstritten betrachten. Es ist sicherlich eine Load-Store-Architektur. Der Basisbefehlssatz ist RISC-ähnlich, aber in den letzten Überarbeitungen ist der Befehlssatz so weit gewachsen, dass ich ihn persönlich eher als Mittelweg zwischen RISC und CISC bezeichnen würde. Der Befehlssatz "thumb" ist wirklich der "RISCish" der ARM-Befehlssätze.

Kennzeichen
quelle
@Mark - ARMs sind auch RISC-Prozessoren, der Befehlssatz ist nicht so schlecht. Es ist eigentlich ganz schön gestaltet; Es gibt einige Anweisungen für die Unterscheidung zwischen User-Space und Kernel-Space und andere Komplexitäten. Diese können jedoch ignoriert werden, wenn Sie anfangen.
Kevin Vermeer
1
@reemrevnivek Ich habe mehr versucht, ihn von der Komplexität des Umgangs mit mehreren Prozessormodi und MMUs abzulenken, als er mit ASM anfing, weshalb ich ARMs der höheren Klasse erwähnte. Die Initialisierung und Einrichtung von High-End-ARM-SoCs ist auch wesentlich komplexer als bei einem AVR / PIC / MSP430.
Mark
RISC? Ich bin mir nicht sicher, ob ich den Unterschied zwischen dem und dem, was die anderen sind, verstehe. Sind die meisten Mikrocontroller nicht RISC? es bedeutet nur, dass weniger Befehlssätze korrekt sind?
1
@sauron Ich habe zu meiner Antwort hinzugefügt: RISC vs CISC.
Mark
Sind Sachen wie AVRs / PICS normalerweise RISC oder CISC?
8

Ich denke, 8-Bit-PIC-Mikrocontroller sind aufgrund der reduzierten Anzahl von Befehlen die beste Wahl.

Der Nebeneffekt der reduzierten Anzahl von Befehlen ist, dass Sie das Rad im Vergleich zu anderen Mikrocontrollern mit mehr Befehlen neu erfinden müssen.

Nachdem Sie mit PIC gelernt haben, können Sie auf andere Mikrocontroller migrieren und sehen, was für Sie besser passt.

Daniel Grillo
quelle
Ich würde dem nicht völlig widersprechen, da ich dies gerade untersuche, aber 8-, 16- und 32-Bit-Cores haben völlig unterschiedliche ASM-Strategien.
Grady Player
7

Ähnlich wie bei Marks Vorschlag für das 68HC11 handelt es sich bei dem Befehlssatz der Freescale 68HCS08-Familie um eine abgespeckte Version des Motorola 6809, für die ich einen der saubersten 8-Bit-Befehlssätze seiner Zeit hielt. Sie können eine Entwicklungsplatine mit Schalter, LEDs bekommen, 3-Achsen - Beschleunigungssensor und Piezo - Summer für 79 $ hier .

Tcrosley
quelle
Die reduzierte 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 viel der Stapel mit HC11s zu tun hat (was später in meinem Labor gelernt wurde) 12er)). AVRs sind wirklich nett, weil Sie satte 32 Register haben, mit denen Sie spielen können, bevor Sie sich um den Stack kümmern.
Nick T
Eigentlich mag ich die Einfachheit des einzelnen Akkus, auch wenn es ein Engpass sein kann. Anstatt den Stack für temporäre Variablen zu verwenden, ist es für mich zunächst einfacher, die 144-Byte-Direktseitenvariablen zu verwenden, auf die mit kürzeren Anweisungen zugegriffen werden kann (die anderen 112-Byte-Direktseiten werden für E / A-Register verwendet). Die Verwendung des Stacks (der reentrante und rekursive Routinen ermöglicht) kann später erlernt werden.
Tcrosley
War die HC (S) 08 nicht von der HC05 abgeleitet?
Johan.A
@ Johan.A Ja, du hast absolut recht. Der HCS08 ist eine erweiterte Version des HC05. Ich hätte das erwähnen sollen. Ich denke die Herleitung ist so etwas wie 6800 -> 6801 -> 6805 -> HC (S) 08. Ich habe eine Menge Assembler-Code für den 6805 geschrieben. Ich habe den HCS08 mit dem 6809 verglichen, um mit den anderen Kommentaren zum 68HC11 (der in etwa eine Mikrocontroller-Version des 6809 ist) übereinzustimmen.
Tcrosley
4

Der msp430-Befehlssatz eignet sich gut zum Erlernen von Assembler. Vermeiden Sie x86. Arm ist ein weiterer guter Arm, verfügt jedoch über viel mehr Anweisungen und Optionen und eignet sich möglicherweise nicht als erster Befehlssatz. Thumb ist eine Teilmenge des Arm-Befehlssatzes und nicht schlecht. Auf Github habe ich sowohl einen Daumen-Emulator (Thumbulator) als auch einen Msp430-Emulator (nicht so viel getestet wie der Daumen-Emulator), die Barebones sind, nur den Prozessor und den Speicher und etwas mehr So erhalten Sie einen guten Überblick über die Vorgänge. Eine Alternative wäre zum Beispiel QEMU, wo die Sichtbarkeit vorhanden ist, aber viel schwieriger zu erreichen ist. Bei einer QEMU-ähnlichen Lösung ist ebenfalls viel mehr Arbeit erforderlich, bevor Sie herausfinden, ob etwas funktioniert.
Gehen Sie zu mspgcc4.sf.net, um eine Toolchain und / oder ein Standard-Binutils (./configure --target = msp430 --prefix = / something) in Kombination mit einem Standard-llvm zu erstellen. Sobald Sie für Hardware bereit sind, kostet ein msp430-Entwicklungsboard weniger als 5 Dollar. Für Arm- / Daumenwerkzeuge erhalten Sie einfach die Lite-Version von Codesourcery. Ein Cortex-m3-Board (Daumen / Daumen2) kostet derzeit ungefähr 12 Dollar. Ich würde x86 und avr und andere als ersten Befehlssatz vermeiden, du wirst lernen wollen, dass andere gut gerundet sind. Der alte / originale pic Befehlssatz 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 zuerst nicht unbedingt lernen, es lehrt einige interessante Dinge, aber gleichzeitig skaliert es nicht und ist nicht unbedingt repräsentativ für gemeinsame Funktionen, die Sie in den meisten Anweisungssätzen finden. Das msp430 gab mir das Gefühl von pdp11, dem ersten Befehlssatz, den ich wirklich gelernt habe. Beide haben gut gerundete, meist orthogonale Merkmale. Sowohl die msp430- als auch die microchip pic-Anweisungssätze sind auf Wikipedia dokumentiert, zumindest als Referenz. Um ein vollständiges Bild zu erhalten, beziehen Sie sich auf die Datenblätter / Handbücher der Anbieter, in denen die einzelnen Registrierungs- und Adressierungsmodi, Zurücksetzen / Booten usw. beschrieben werden.

Oldtimer
quelle
Nur für Assembler benötigen Sie nur binutils, zumindest für arm / thumb oder msp430, und Sie können den Assembler und den Linker erstellen. Wenn Sie einen C-Compiler benötigen, mit dem Sie die Assembler-Ausgabe als Lernprogramm untersuchen können, benötigen Sie mspgcc4 oder codesourcery, oder verwenden Sie einfach llvm für beide.
old_timer
4

Sind Sie sicher, dass Sie Assembly lernen möchten? Kannst du sagen warum? Es ist eine ziemliche Aufgabe und wird heutzutage immer seltener oder nützlicher. Dies ist von einer Person, die darin geschrieben hat und sogar von Hand zusammengestellte Programme (kein Assembler, Linker, nur eine Karte mit dem Befehlssatz).

russ_hensel
quelle
Dies ist nicht wirklich eine Antwort, sondern vielmehr ein Kommentar. Ich würde auch zögern, einem eingebetteten C-Programmierer zu vertrauen, der ab und zu nicht bereit war, durch Teile der Assemblierung zu stapfen, wenn er versuchte, eine Kuriosität im Verhalten eines Projekts zu verstehen.
Chris Stratton
4

Ich habe auch auf einem 68HC11 im College gelernt. Sie schlagen dies eher vor als jede andere MPU / MCU. Ich wollte nur darauf hinweisen, dass auf der von uns verwendeten Entwicklungsplatine ein Monitorprogramm installiert war. Von einem dummen Terminal aus könnten wir den Code durchgehen und die Register untersuchen ... Ich würde vorschlagen, wenn Sie wissen, welcher Prozessor Ihren Anforderungen entspricht, überprüfen Sie auch, welche Entwicklungsboards mit einem Monitorprogramm verfügbar sind.

mvr
quelle
Das Monitorprogramm scheint sehr hilfreich zu sein. Mit welchem ​​Buch hast du das gelernt? Wenn es Ihnen etwas ausmacht, fragen Sie mich ....
Ich auch Erfahrungen mit dem 68HC11 hatte und das „Monitoring Program“ ist bekannt als der Buffalo - Monitor . Im Grunde ist es nur ein Programm, das im ROM gespeichert ist und seriell mit Ihrem PC kommuniziert. Sie tippen in ein Terminal und das Programm interpretiert Ihre Anfragen und gibt Ihnen Informationen zurück. Sie können den Speicher auf dem Bildschirm sichern, Speicherwerte ändern, Anweisungen durchgehen usw. Die von uns verwendete Karte war diese . Dieser Controller ist einfach zu erlernen, aber sehr altmodisch.
Sherrellbc
... Das Buch, das wir verwendet haben, war das, wenn Sie interessiert sind. Ich würde vorschlagen, mit einem moderneren Controller wie AVR zu arbeiten. Ihr Development Board finden Sie hier .
Sherrellbc
3

Ich unterrichte sowohl PIC (14-Bit-Core) als auch ARM-Assembly. 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 Daumen / Kortex!) Ist eine sehr schöne Architektur, um Assemblierung zu lernen. Wir verwenden eine LPC2148-Karte.

Wouter van Ooijen
quelle
Hallo Wouter, schön dich hier zu sehen!
Olin Lathrop
2

Ich habe 16-Bit-PIC-Assembly mit einem dsPIC33F gelernt. Die Assemblierung des Prozessors ist insofern ziemlich C-artig, als sie Zeiger und drei variable Operationen (zum Beispiel A = B + C) unterstützt, was das Lernen und Anpassen erheblich erleichtert.

Thomas O.
quelle
1

Sie verwirren hier Mikrocontroller und Mikroprozessoren. AVR ist eine Mikrocontroller-Linie von Atmel, kein Mikroprozessor. Ich schlage vor, dass Sie zuerst in Wikipedia suchen, um ein besseres Verständnis der Unterschiede zwischen diesen zu erhalten. Grundsätzlich ist ein Mikrocontroller ein mehr oder weniger vollständiges System, während ein Mikroprozessor nur die CPU ist (daher enthält ein Mikrocontroller einen Mikroprozessor).

Erik
quelle
Ja, das wusste ich, ich weiß nicht, warum ich das nicht gesagt habe. Ich meinte, wie nicht viele Führer darüber reden, tatsächlich einen MP und Speicher (wie Flash oder EEPROM) usw. zu verbinden ...
1
Da die meisten Mikroprozessoren jetzt über Cache / Speicher und einige E / A verfügen, ist die Zeile sehr verschwommen.
kenny
1
@ Sauron - Bist du dir sicher, dass du das wusstest? Du hast wieder MP benutzt; Ein Mikrocontroller (das ist der richtige Begriff für einen AVR und 99% der hier diskutierten Geräte) verfügt fast immer über einen integrierten Speicher (sowohl nichtflüchtig wie EEPROM und Flash als auch flüchtiger SRAM). Lernen Sie den Umgang mit dem Bordmaterial, bevor Sie sich auf Peripheriegeräte einlassen.
Kevin Vermeer
1

An meiner Universität wurde uns Hardware-Design / Architektur neben Assemblersprache (die beiden gehen offensichtlich Hand in Hand) mit der MIPS- (oder vielleicht DLX- ) Architektur beigebracht . Seitdem habe ich mich ein bisschen in der Schule / Arbeit mit der PIC- und AVR-Montage beschäftigt und sie sind sich alle ziemlich ähnlich. Ich denke, MIPS-Assembly war ein guter Ausgangspunkt, da die Sprache sehr einfach ist, ebenso wie die Prozessorarchitektur.

Siehe auch: dieses Buch . Nicht das beste Buch der Welt, aber es ist das Standardbuch für Computerdesign an vielen Universitäten.

Shamtam
quelle
Der Microchip PIC32 nutzt die MIPS - Architektur und es ist ziemlich einfach MIPS zu mischen Assembler mit C
tcrosley
0

Mein Vorschlag ist, dass jeder, der sich mit Mikrocontrollern und Prozessoren befasst, das Buch "Code the hidden language of computer" lesen sollte, wenn er annimmt, dass er ein Experte für Prozessoren ist und zum Programmieren besser Poney Prog Programmer und Programme von Poney Prog Programmer verwendet atmel studio6.1 von atmel offiziellen Website

Avinash
quelle
Bitte skizzieren Sie die Hauptmerkmale des Buches und des Programmierers, die das OP dazu neigen würden, genau diese zu verwenden.
Vorac,
Es geht darum, einen Mikrocontroller zu verstehen, wie er aus digitalen Systemen entwickelt wurde, und die Assemblersprache zu erklären
Avinash
gehe zu dieser Seite j.mp/mpcinterest um das Buch zu bekommen
avinash