Was sollte ich wissen, wenn ich von Mikrocontrollern zu Mikroprozessoren wechseln möchte? [geschlossen]

Ich bin mit der Verwendung von Mikrocontrollern vertraut, sowohl mit Frameworks wie Arduino als auch nativ (PIC / AVR). Ich bin auch mit der allgemeinen Architektur eingebetteter Systeme vertraut, da ich weiß, dass Sie einen Prozessor mit diskretem RAM und ROM/Flash haben, der über verschiedene Busse verbunden ist. Ich habe jedoch noch nie ein Projekt von Grund auf mit einem Mikroprozessor erstellt.

Was sollte ich wissen, bevor ich zu mikroprozessorbasierten Projekten übergehe? Zum Beispiel bin ich es auf einem Mikrocontroller gewohnt, einfach Code durch meinen Compiler zu senden und eine Binärdatei zu erhalten, die über ISP oder ähnliches hochgeladen werden kann - wie funktioniert das mit einem Prozessor mit diskretem Flash? Und was ist mit Taktquellen - haben Prozessoren normalerweise eine interne Uhr wie MCUs? Ich bin mir sicher, dass es auch viele "unbekannte Unbekannte" gibt - wo sollte ich suchen, um anzufangen?

Ich interessiere mich hauptsächlich für ARM- und x86-Plattformen, aber allgemeine Ratschläge wären auch nützlich.

Das einzige, was sich wirklich ändert, ist der Upload-Mechanismus. Und dieser Mechanismus kann Dutzende von Formen annehmen.
@IgnacioVazquez-Abrams Ich verstehe nicht, wie das der Fall sein kann - sicherlich gibt es Feinheiten beim Zugriff auf RAM / ROM, die in MCUs nicht vorhanden sind?
Nur damit, wie es verbunden ist. Ansonsten verwendet es weiterhin nur die Adress- und Datenbusse wie gewohnt.
Bei modernen SoCs ist die Unterscheidung zwischen den beiden ziemlich marginal und weitgehend eine Frage der Pedanterie. Eher eine Frage, was für Dinge Sie im System haben, z. B. externes DRAM, Speichercontroller usw.
Der E/A-Bus ist in modernen Mikroprozessoren stärker vom Kern "getrennt" als in kleinen Mikrocontrollern. Sehen Sie sich eine Metrik an, z. B. wie schnell Sie einen I/O-Pin per Software umschalten können, dividiert durch MIPS. Sie könnte auf einem kleinen Mikrocontroller leicht mehr als eine Größenordnung höher sein.
Würde es dem Downvoter etwas ausmachen, seine Argumentation zu erklären? Ich kann keine besseren Fragen ohne Feedback schreiben.
Ich bin kein Downvoter, aber ich sehe eine Abstimmung zum Schließen als primär meinungsbasiert an (und aus diesem Grund wurde die Frage in die Warteschlange zur Überprüfung der Abstimmung aufgenommen - so bin ich dazu gekommen). Das könnte der Grund für die Ablehnung sein. Ich stimme nicht dafür ab, sie zu schließen oder offen zu lassen (dh ich überspringe die Frage), aber die lange Reihe von Kommentaren, die sich zu der Frage und zu einer der Antworten bilden, kann ein Zeichen für zu viel Diskussion sein.

Antworten (2)

Der Hauptunterschied bei diesen Systemen besteht darin, dass sie im Allgemeinen nicht direkt aus dem Flash heraus ausgeführt werden – stattdessen gibt es ein kleines Programm im Flash, das als Bootloader fungiert, und das Programm wird dann von einem Medium wie z B. eine SD-Karte oder SSD oder Festplatte in den Arbeitsspeicher, von wo es dann ausgeführt wird. Wenn der Bootloader aktualisiert werden muss, gibt es einige Mittel, entweder über den Mikroprozessor oder extern, um ihn zu aktualisieren und neu zu programmieren.

Wenn Sie also Ihr Programm aktualisieren, wird es auf Ihr System heruntergeladen und dann auf die SD-Karte oder SSD oder Festplatte geschrieben, was auch immer Sie haben.

Wenn es läuft, gibt es wirklich keinen Unterschied zwischen einem Mikrocontroller und einem Mikroprozessor. Es ist nur so, dass im letzteren Fall viel mehr RAM (vielleicht mehrere hundert MB) vorhanden ist, als Sie in einem Mikrocontroller finden würden. Der CPU ist es egal, ob ihr RAM oder Flash ausgeht. Auf eine Sache müssen Sie achten: Ein fehlerhaftes Programm kann sich im RAM selbst löschen, während dies im Flash nicht passieren kann.

Mikroprozessoren haben fast immer einen externen Quarz als Taktquelle. Der Prozessor kann eine PLL (Phase Locked Loop) verwenden, um die Kristallfrequenz auf einen viel höheren Wert (mehrere hundert MHz oder sogar ein GHz) zu multiplizieren. Dies ist Teil des Initialisierungscodes.

Der Zugriff auf Peripheriegeräte ist im Wesentlichen dasselbe wie bei einem Mikrocontroller; Sie befinden sich nur außerhalb des Chips und nicht darin, sodass der Zugriff nicht so schnell ist. (Die einzigen „Peripheriegeräte“ auf einem x86-Chip sind typischerweise Timer, DMA und Interrupt-Controller.) Der Prozessor kommuniziert mit den Peripheriegeräten über I/O-Ports.

XIP ist auf jeden Fall genial.
@IgnacioVazquez-Abrams Danke, war mir dessen nicht bewusst.

Meiner Meinung nach besteht eine der besten Methoden zur Unterscheidung zwischen einer MPU und einer MCU darin, ob die CPU eine Speicherverwaltungseinheit (MMU) enthält – das heißt einen Hardwaremechanismus zum Abbilden nicht zusammenhängender Speicherblöcke in einen virtuellen zusammenhängenden Raum the fly, wobei die Zuordnung davon abhängt, welcher Prozess ausgeführt wird.

Dies ermöglicht einzelnen Prozessen, jeden Speicher zu verwenden, den sie "sehen" können, und schützt jeden Speicher, den sie nicht "sehen" können, vor versehentlichen Zugriffen.

Eine CPU mit einer MMU ist eine MPU; Eine CPU ohne MMU ist eine MCU.

Sorry, aber einfach falsch. Die früheren Mikroprozessoren (8080, 6800, 6502, ursprünglicher 8086, Z80, sogar der 68000) hatten keine MMU – dennoch waren sie definitiv Mikroprozessoren, keine Mikrocontroller. Sie hatten keinen integrierten Speicher oder Peripheriegeräte. Der 68030 war einer der ersten Mikroprozessoren mit integrierter MMU. Der 8051 war einer der ersten Mikrocontroller. Eine bessere Unterscheidung zwischen Mikroprozessoren und Mikrocontrollern besteht darin, ob sie einen externen Adressbus haben – in den meisten Fällen wahr. Weitere Informationen finden Sie in dieser Antwort .
@tcrosley Nein, ich liege nicht falsch; wenn ich mich geirrt hätte, wüsste ich es. Ich beziehe mich eigentlich auf die Meinung von ARM; Ich denke, ich bin auf ziemlich sicherem Boden, wenn ich akzeptiere, dass sie wissen, wovon sie reden. Es können einige zusätzliche Kriterien gelten, z. B. externer Speicher, aber eine MMU ist aufgrund ihrer Relevanz für Multitasking (im Gegensatz zu Multithreading) sinnvoll.
ARM ist ein Sonderfall, weil sie einige Mikrocontroller mit externen Adressbussen herstellen, also eine Kombination aus einem Mikroprozessor und einem Mikrocontroller sind. Wie sie sie nennen wollen, ist ihre Sache. Es ist nicht die Mainstream-Ansicht. Siehe dies und dies und dies . Keine Erwähnung von MMU als Kriterium.
@trcosley yeah ... Das sind nicht viel mehr als Verkaufsleitfäden, ich denke, ich bleibe bei ARMs Standpunkt. Ich sage nicht, dass andere Faktoren nicht relevant sind, aber das Vorhandensein einer MMU macht oder bricht es, soweit es mich betrifft.
Sie sagen also, die 8080, 6800, 6502, 8086, Z80 und 68000 waren keine Mikroprozessoren? Was waren Sie? Sicherlich keine Mikrocontroller, sie hatten keinen Speicher oder Peripheriegeräte auf dem Chip. Sie unterschieden schon damals zwischen Mikrocontrollern (8048, 8051) und Mikroprozessoren.
@tcrosley Wie gesagt, nicht das einzige Kriterium, nur das wichtigste. Außerdem gibt es wahrscheinlich historische technische Einschränkungen, die erklären, warum die meisten der von Ihnen aufgelisteten Prozessoren keine Single-Chip-Lösungen waren - es war einfach noch nicht möglich (zumindest zu einem praktikablen Preis). Verdammt, ist mir egal, nennen Sie sie, wie Sie wollen, Sie werden sauer, wenn es um Semantik geht. Ob es Ihnen gefällt oder nicht, unsere Meinungen stimmen nicht überein und werden es wahrscheinlich auch nicht. Wir könnten als nächstes darüber streiten, ob Schwarz eine Farbe oder ein Farbton ist, wenn Sie möchten?
Solange Sie die historische Bedeutung der frühen Mikroprozessoren erkennen, die keine MMUs hatten, während ich zugebe, dass praktisch alle Mikroprozessoren heute MMUs haben (mir fällt keiner ein, der keine MMUs hat), dann können wir meiner Meinung nach enden unsere Debatte.
@tcrosley Einverstanden.