Es gibt Mikrocontroller die können Programme im RAM ausführen, wie z. B. die 51-Familie und die ARM-Controller (STM32F103 u. ä.). Welche Mikrocontroller gibt es noch mit dieser Eigenschaft?
Friedhelm schrieb: > Es gibt Mikrocontroller die können Programme im RAM ausführen, wie z. B. > die 51-Familie Genau die ist jetzt das schlechteste Beispiel. Denn genau die hat getrennte Speicherbereiche (und Steuersignale) für Code und Daten. Und die Ausführung aus dem Datenspeicher wird nur durch eine "trickreiche" Beschaltung von /PSEN und /RD erreicht. > Welche Mikrocontroller gibt es noch mit dieser Eigenschaft? Fast jeden, der einen externen AD-Bus oder intern einen linearen Speicherbereich (auch bekannt als "von Neumann Archtitektur") hat. Du musst nur das RAM so anschließen/ansteuern können, dass über den Programmcounter drauf zugegriffen werden kann.
:
Bearbeitet durch Moderator
Arduino F. schrieb: > Der ESP8266 Gutes Beispiel. Den habe ich sogar in der Schublade liegen. Werde ich mir noch näher anschauen. Gefunden habe ich noch die MSP430-Controller.
Karl M. schrieb: > Natürlich die Z80 Familie. Das dürften in erster Linie Mikroprozessoren sein. Meinst du eine bestimmte Mikrocontroller-Familie mit Z80-Kern?
68HC11, 68HC16, M16C, ... Frag lieber, welche das nicht können(*), dann wird die Liste nicht so lang. (*) Können ist je nach Hersteller der falsche Ausdruck, das kann auch als Feature verstanden werden. Bei 16-Bit Adressen kann der Adressraum dadurch z.B. komplett für das Flash verwendet werden. Gruß, Stefan
Beim Z8 (U881..883) gab es ein Pin, mit dem man bei Bedarf zwischen externem Code- und Datenspeicher unterscheiden konnte. im Extremfall also 62k externer RAM für Daten und 62k externer RAM für Programm/Daten. Die ersten 2K wurden durch den internen ROM "verdeckt", ähnlich wie bei den MCS-51 mit internem Flash, wenn man dort 64k externen RAM anschließt. Lang lang ist s her..
Friedhelm schrieb: > Welche Mikrocontroller gibt es noch mit dieser Eigenschaft? Grundsätzlich jeder, denn der Prozessor kann ja garnicht wissen, ob es sich an der bestimmten Adresse um ROM oder RAM handelt. Die Fragen müssen lauten: Kann man ein RAM anschliessen? Wenn ja (externer Datenbus), kann man natürlich hardwaremässig ROM (Flash) oder RAM ansteuern. Es bleibt aber die Frage, wie kommt das Programm ins RAM, denn dort bleibt es ja nicht ohne Stromversorgung. Üblicherweise wird es vom ROM ins RAM kopiert. Wenn es sich um internes RAM handelt, ist es davon abhängig, ob dieses RAM als Programmspeicher addressiert werden kann. Ist das nicht der Fall, so liegt das nicht daran, dass der Prozessor das Programm nicht auch aus einem RAM ausführen könnte, sondern daran, dass man an der Adressdekodierung nichts ändern kann. Dass bei Harvard-Architekturen die Wortlängen unterschiedlich sein können, ändern daran garnichts, denn natürlich kann ein Harvard-Controller z.B. 8bit RAM für die Daten und 12bitRAM für das Programm haben. Es bleibt bloss wieder die Frage, wie kommt das Programm ins RAM, denn zum Kopieren braucht man dann Lese- und Schreibbefehle für 12 bit. Grundsätzlich könnte man aber das Kopieren des Programms auch mit externer Hardware ausführen, was oft bei Emulatoren vorgesehen ist. Georg
Friedhelm schrieb: > Es gibt Mikrocontroller die können Programme im RAM ausführen, wie z. B. > die 51-Familie Der 8051 gehört genau nicht dazu, bei dem sind Code und Datenspeicher getrennt! Es geht nur mit einem Trick, indem man externen RAM anbindet und PSEN mit /RD verundet. Das wurde früher oft bei alten Eval-Boards gemacht. Und einige spezielle 8051 mit großem internen SRAM (z.B. DS5000) können Teile des SRAM als Code mappen. Viele moderne 8051 brauchen das nicht mehr, sie können über einen Bootloader das interne Flash beschreiben.
Peter D. schrieb: > Der 8051 gehört genau nicht dazu, bei dem sind Code und Datenspeicher > getrennt! Quatsch, Harvard hat überhaupt nichts zu tun mit der Tatsache, ob an einer bestimmten Stelle im Adressraum ROM oder RAM installiert ist. Dass es mit einem Trick geht, beweist ja dass es geht, was heisst da überhaupt Trick, das ist einfach eine bestimmte Adressdekodierung. Der Post ist schon deshalb daneben, weil der 8051 dafür besonders geeignet ist, da bei ihm Programme und Daten die gleiche Länge haben, bei anderen Prozessoren wäre das aufwendiger, geht aber auch. Dazu hättest du nur den vorigen Post von mir lesen müssen, aber als selbsternannter Softwareguru ist das natürlich unter deiner Würde. Georg
Vermutlich alle ARM und die meisten Anderen aber oft steht halt wenig RAM zur Verfügung, zB kann eine Flash Programmier Routine dort stehen. Oder Beim Debuggen und Entwickeln ist es halt schneller im RAM. Wenn du einen UC mit externen Address Bus suchst so wird es die auch geben.zB einen von Atmel SAM7A irgendwas.
Lothar M. schrieb: > Fast jeden, der einen externen AD-Bus oder intern einen linearen > Speicherbereich (auch bekannt als "von Neumann Archtitektur") hat. Du > musst nur das RAM so anschließen/ansteuern können, dass über den > Programmcounter drauf zugegriffen werden kann. Das ist aber nur ein Teil. Eine moderne MCU wie zum Beispiel ein STM32F446 oder die STM32F7 können über das QuadSPI-Interface Speicher in den Adressraum mappen und somit Code direkt vom SPI-Flash oder SPI-RAM ausführen. Dafür braucht es dann keinen externen AD-Bus und spart somit viele Leitungen. Beim STM32 ist es zudem je nach Taktfrequenz wegen der nötigen Flash-Waitstates für den internen Flash teilweise schneller, auf den Quad-SPI zuzugreifen.
Der ESP32 sollte das meines Wissens auch können, nur in der ersten Revision ist da wohl ein dicker Bug drin, der das verhindert.
Georg schrieb: > Dass > es mit einem Trick geht, beweist ja dass es geht, was heisst da > überhaupt Trick, das ist einfach eine bestimmte Adressdekodierung. Der Trick ist aber nur mit zusätzlicher Hardware machbar, weil dann aus Platzgründen beide Busse extern auf die gleichen Pins gemultiplext werden. On Chip kann er keinen Code aus seinem SRAM ausführen! In der Applikation schließt man auch nicht noch nen Haufen drumrum an und möchte auch keine Ports verlieren.
Georg schrieb: > Grundsätzlich jeder, denn der Prozessor kann ja garnicht wissen, ob es > sich an der bestimmten Adresse um ROM oder RAM handelt. Wenn es - wie hier gefragt - um Mikrocontroller geht, dann wird es sich dabei üblicherweise um Geräte mit internem Speicher handeln. Und dann steht das im Datasheet.
:
Bearbeitet durch User
die neuen SAMS70/E70/V7x können bis zu 384KB direkt vom Core angesprochen werden, mit 64Bit access, max. 300MHz und 0WS, vor allem interessant wenn da man hier die Caches wie icache/dcache umgeht. Gegenüber cache hat das den Vorteil, dass man deterministische Ausführung erreicht. Weiterhin können sowohl der Core als auch der DMA auf den SRAM zugreifen, bei Cache kann es nur der Core. Dann hat das Prinzip noch den Vorteil dass man immer mit einem Clock Zyklus für den Zugriff rechnen kann. Beim Cache hängt das vom cache-hit und miss ab.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.