Daher sehe ich oft Bücher / Tutorials und Referenzen, wenn ich in der Montage auf einen Mikroprozessor programmiere. Dann wird es von einigen als Mikrocontroller bezeichnet.
Zum Beispiel das Atmel ATtiny2313 ... ich habe einige Tutorials gesehen, manche nennen es einen Mikroprozessor, manche nennen es einen Mikrocontroller?
Welches ist es? und programmiert man sie (im Grunde) gleich? (in Montage)
Antworten:
Das sind wirklich zwei Fragen in einer ...
Was ist der Unterschied zwischen einem Mikrocontroller und einem Mikroprozessor?
Der Mikroprozessor ist eine reine CPU, die einer Reihe von Anweisungen folgt, die von einem externen Speicherbus gelesen werden. Es steuert externe Peripheriegeräte (wie Bildschirm, Tastatur, Maus, Festplatte usw.) über einen externen Kommunikationsbus. Wenn Sie einen Mikroprozessor programmieren, befindet sich Ihr Programm außerhalb des Geräts. In einem Computer ist dieser Speicher zunächst das Boot-BIOS-ROM, das das Betriebssystem zunächst von der Festplatte in den RAM-Speicher liest und von dort aus weiter ausführt.
Der Mikrocontroller ähnelt einem All-in-One-CPU + -Speicher mit einigen externen Ports für die Kommunikation mit der Außenwelt. Es ist in sich geschlossen und verwendet keinen externen Speicher, um das Programm zu speichern (obwohl es bei Bedarf Arbeitsdaten lesen und in den externen Speicher schreiben kann).
Zweitens ist die Programmierung eines Mikrocontrollers und eines Mikroprozessors gleich?
In gewisser Weise ja und in gewisser Weise nein.
Assemblersprache ist ein weit gefasster Begriff, der eine Reihe von Anweisungen beschreibt, die die CPU direkt verstehen kann. Wenn Sie die Assemblersprache "kompilieren", wird nichts wirklich kompiliert, sondern nur in eine Folge von Bytes konvertiert, die die Befehle und Stecker an einigen relativen Speicherorten darstellen. Dies ist sowohl für Mikroprozessoren als auch für Mikrocontroller gleich.
Unterschiedliche CPU-Typen verstehen jedoch unterschiedliche CPU-Anweisungen. Wenn Sie beispielsweise ein Assembler-Programm schreiben, das mit einem pic 16F877-Mikrocontroller funktioniert, ist dies für einen Mikroprozessor oder einen anderen Mikrocontroller außerhalb der 16Fxxx-Familie von pic-Mikrocontrollern ein völliger Unsinn.
Obwohl die Assemblierung für alle Mikroprozessoren und Mikrocontroller ähnlich funktioniert, ist die tatsächliche Liste der Anweisungen, die Sie schreiben, sehr unterschiedlich. Um in Assemblersprache schreiben zu können, müssen Sie über fundierte Kenntnisse der Gerätearchitektur verfügen, die Sie normalerweise bei einem Mikrocontroller aus dem Datenblatt abrufen können.
quelle
Der Unterschied besteht darin, dass der Mikrocontroller On-Chip-Speicher wie Flash-EEPROM und RAM sowie Peripheriegeräte wie parallele und serielle E / A enthält. Bei den ersten Mikroprozessoren waren dies alles externe Geräte. Anstelle der E / A-Mikroprozessoren wurde der Adress- und Datenbus an ihre Pins gebracht.
Die Art und Weise, wie Sie Code für beide schreiben, ist dieselbe.
Um diesen Punkt zu veranschaulichen: Es gibt Architekturen (z. B. ARM), bei denen dieselbe CPU als Mikrocontroller (mit sämtlichem Code und Datenspeicher auf dem Chip), als Mikroprozessor (alle Codes und Datenspeicher extern) oder als Hybrid (einige) verfügbar ist Speicher auf dem Chip, aber für die meisten Anwendungen werden Sie externen Speicher hinzufügen). Die CPU ist dieselbe, daher ist die Programmierung (im Sinne von CPU-Anweisungen) dieselbe.
quelle
Obwohl dies tendenziell eine Grauzone ist, besteht ein weiterer gemeinsamer Unterschied zwischen Mikrocontrollern und Mikroprozessoren darin, dass Mikrocontroller häufig die Harvard-Architektur (separater Adressraum für Code und Daten) verwenden, während Mikroprozessoren fast alle die Von Neumann-Architektur (kombinierter Adressraum für Code und Daten) verwenden. .
Beispiele für Mikrontrollerfamilien, die die Harvard-Architektur verwenden, sind: AVRs, Intel 8051, PICs (außer PIC32, siehe unten) und ARM Cortex-M3. Eine bemerkenswerte Ausnahme bilden Freescale-Prozessoren wie der HCS08, die die Von Neumann-Architektur verwenden, ebenso wie der Parallax Propeller.
Dies wirkt sich auf verschiedene Weise auf die Programmierung aus (die unten gezeigten Beispiele verwenden C):
Es kann verschiedene Arten von RAM geben, von denen jeder seinen eigenen Adressraum hat. Beispielsweise verfügt der 8051 über externe Daten (xdata), die getrennt von den ersten 256 Byte RAM adressiert werden, obwohl beide auf demselben Chip implementiert sind. Man muss also Qualifikationsmerkmale für Variablendeklarationen wie verwenden
unsigned int xdata foo;
Wenn Konstanten im Codespeicher deklariert sind, müssen sie möglicherweise in den Arbeitsspeicher kopiert werden, bevor auf sie zugegriffen werden kann. Oder es muss eine Möglichkeit geben, auf den Codespeicher zuzugreifen, als wären es Daten - z. B. das Code-Qualifikationsmerkmal für 8051s oder die PSV-Funktion (Program Space Visiblity) von PIC.
Diese nicht standardmäßigen Möglichkeiten für den Zugriff auf Code und RAM sind (neben den Peripheriegeräten) der Hauptunterschied beim Portieren von C-Code von einer Chipfamilie zu einer anderen.
Sie können in einer strengen Harvard-Architektur keinen Code aus dem RAM ausführen, daher kann es keinen selbstmodifizierenden Code geben (es sei denn, Sie zählen das erneute Flashen des Programmspeichers im laufenden Betrieb). Der PIC32 verfügt jedoch über eine modifizierte Harvard-Architektur, mit der Code im RAM ausgeführt werden kann. Der Parallax Propeller nutzt tatsächlich seine Fähigkeit, Code zu ändern, um Subroutinenrückgaben durchzuführen, da er keinen Hardware-Stack hat.
quelle
Ein Mikrocontroller ist im Allgemeinen eine Einzelchip-Lösung, um Berechnungs- und Peripheriefunktionen bereitzustellen.
Ein Mikroprozessor stellt die Berechnungsfunktionen bereit, nicht jedoch die Peripheriefunktionen.
Peripheriefunktionen können so einfach sein wie ein paar Bits einfacher E / A. oder kann hochentwickelte Zähler und Zeitgeber, Videoanzeige, Ethernet, Motorsteuerung, Audio- und Videocodec usw. umfassen.
Für eine gegebene Architektur (z. B. die x86-basierten CPUs und MCUs) ist die "rechnerische" Codierung identisch. Die Art und Weise, wie Sie auf Peripheriefunktionen zugreifen, ist jedoch unterschiedlich, sodass Sie je nach Implementierung der Peripheriefunktionalität auf Ihrer Zielhardware sehr unterschiedliche hardwarespezifische Codierungen vornehmen müssen.
quelle
Mikroprozessoren werden typischerweise in Computern verwendet, die so konstruiert sind, dass sie Programme mit einem beliebigen, noch zu bestimmenden Zweck ausführen. Solche Computer enthalten im Allgemeinen vom Hersteller bereitgestellten Code, mit dem der vom Benutzer bereitgestellte Code voraussichtlich interagieren wird. Im Gegensatz dazu werden Mikrocontroller normalerweise in Maschinen verwendet, die ausschließlich zum Ausführen eines einzelnen Programms gebaut wurden. Oft liefert jemand, der Code für einen Mikrocontroller schreibt, jeden einzelnen Befehl, den die Maschine ausführt.
Einige Mikrocontroller verwenden dieselben Befehlssätze wie gängige Mikroprozessoren. Der 68000-Befehlssatz, der in den ursprünglichen Macintosh-, Amiga- und Atari ST-Zeilen von PCs verwendet wird, wurde auch in einigen Mikrocontrollern verwendet. Obwohl der von einem Macintosh und einer 68HC340-basierten Steuerkarte verwendete Befehlssatz derselbe ist, kann die Programmierung für die beiden Plattformen sehr unterschiedlich sein. Auf dem Macintosh ist ein Großteil des Systems bereits "eingerichtet", wenn ein vom Benutzer bereitgestelltes Programm gestartet wird. Code, der einen Speicherblock benötigt, kann ein Register mit der erforderlichen Menge laden und einen "A-Trap" -Anweis ausführen. Das Macintosh-Betriebssystem gibt dann einen Zeiger auf einen Speicher zurück, der zuvor nicht für einen anderen Zweck zugewiesen wurde, und markiert diesen Speicherbereich, damit er gewinnt. ' t wird erneut zugewiesen, bis der ursprüngliche Empfänger angewiesen wird, es nicht mehr zu benötigen. Im Gegensatz dazu besteht auf einer Karte mit 68HC340 und 128 KB RAM keine Notwendigkeit oder Fähigkeit, nach RAM zu "fragen". Wenn das Programm startet, "bekommt" es 128K, das es verwenden kann, wie es will; nichts anderes wird es verwenden, aber auf der anderen Seite muss das Programm des Benutzers verfolgen, welche Bereiche es für welche Zwecke verwendet, da nichts anderes dies verfolgen wird.
Während hier wirklich zwischen einem Mikrocomputer und einem Mikrocontroller unterschieden wird und es sich um Mikroprozessoren handelt, wird dies in den meisten Diskussionen zur Mikroprozessorprogrammierung im Kontext eines Allzweckcomputers diskutiert.
quelle
Mikroprozessor: Ein digitales Hardwaremodul, das Anweisungen ausführt. Das Modul kann eine vollständig integrierte Schaltung sein.
Mikrocontroller: Ein komplettes Modul, das neben anderen Modulen einen Mikroprozessor mit internem Speicher enthält.
quelle