Forum: Mikrocontroller und Digitale Elektronik Mikrocontroller: Programme im RAM ausführen


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Friedhelm (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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?

von Lothar M. (lkmiller) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
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
von Arduino Fanboy D. (ufuf)


Bewertung
0 lesenswert
nicht lesenswert
Der ESP8266

von Friedhelm (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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.

von Frank K. (fchk)


Bewertung
0 lesenswert
nicht lesenswert
MIPS
zB PIC32

68k, ColdFire (68k als RISC)

PowerPC

von Karl M. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Natürlich die Z80 Familie.

von Friedhelm (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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?

von Stefan K. (stefan64)


Bewertung
0 lesenswert
nicht lesenswert
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

von R. M. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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..

von Falk B. (falk)


Bewertung
0 lesenswert
nicht lesenswert
Der PICCOLO.

von Georg (Gast)


Bewertung
-5 lesenswert
nicht lesenswert
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

von Peter D. (peda)


Bewertung
0 lesenswert
nicht lesenswert
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.

von Georg (Gast)


Bewertung
-1 lesenswert
nicht lesenswert
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

von Franzi (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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.

von john doe (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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.

von john doe (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Der ESP32 sollte das meines Wissens auch können, nur in der ersten 
Revision ist da wohl ein dicker Bug drin, der das verhindert.

von Peter D. (peda)


Bewertung
0 lesenswert
nicht lesenswert
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.

von (prx) A. K. (prx)


Bewertung
2 lesenswert
nicht lesenswert
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
von Stefan (Gast)


Bewertung
-1 lesenswert
nicht lesenswert
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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.