Forum: Mikrocontroller und Digitale Elektronik Programmcode aus RAM ausführen


von Rudi (Gast)


Lesenswert?

Hallo,

die hier so beliebten AVRs haben ja bekanntlich eine Harvard Architektur 
und können keinen Programmcode aus dem RAM ausführen.
Ich würd mir aber gerne zu Lernzwecken so ne Art "Minimal-PC" basteln.
Problem ist hier das Software nachladen.
Natürlich kriegt man auf nen Mega128 auch nen einfachen Texteditor und 
nochn kleines Spiel drauf. Aber irgendwie wurmt mich, dass es eben doch 
kein "richtiger" PC ist.

Gibt es denn einen uC der als Bastler noch bewältigt werden kann? Damit 
meine ich sowohl in Bezug aufs Gehäuse als auch den Aufwand der 
Prozessorinitialisierung.

Oder sind Von-Neumann Architekturen generell ne andere Liga und für nen 
Bastler ne Nummer zu groß?

Viele Grüße,
Rudi

von Floh (Gast)


Lesenswert?

Du kannst auf dem AVR z.B. auch einen Interpreter laufen lassen, für 
Basic gibts hier etwas in der Artikelsammlung.

von Stefan (Gast)


Lesenswert?

Es gibt auch Java VM's für AVR Mikrocontroller. Dann kannst Du Deine 
Programme mit dem normalen Java Compiler von Oracle erstellen.

Suche mal nach TinyVM oder Lejos.

Wenn Du die Funktion eines PC einigermaßen nachbilden/erfoschen willst, 
dann würde ich allerdings einen Prozessor mit zumiondestb ähnlicher 
Srchitektur wählen. Zum Beispiel den guten alten 80186 + RAM + ROM.

Das ROM würde ich allerdings mit Hilfe eines statischen RAM + Batterie 
simulieren, denn dann brauchst Du kein Equipment zum Brennen und Löschen 
von Eproms.

ARM Controller können meines Wissens nach auch Code aus dem RAM 
ausführen, nur etwas langsamer. Vielleicht ist ein ARM für Dich 
interessant. Such mal nach STM32 Discovery oder Mbed.

von Georg G. (df2au)


Lesenswert?

80186 ist für einen Anfänger zu gross. Ohne Eprom wird es auch nicht 
gehen. Irgendwie muss er ja die ersten Bytes hineinbekommen.

Ein MCS51 Derivat kann sehr einfach (ein Oder-Gatter) auf die "normale" 
Architektur gebracht werden. Werkzeuge sind gratis reichlich vorhanden. 
Die Hardware ist übersichtlich. Und es gibt reichlich Code Beispiele.

von Rudi (Gast)


Lesenswert?

Danke euch schon mal.

Das STM32 Board klingt interessant, werde ich mir mal anschauen. Ein 
Interpreter ist eigentlich nicht das, was ich suche.

Als Anfänger würde ich mich btw nicht bezeichnen. Neben den AVR hatte 
ich beruflich auch schon mit einigen 32 Bit Architekturen, allerdings 
immer Harvard, zu tun.

von (prx) A. K. (prx)


Lesenswert?

Rudi schrieb:
> Oder sind Von-Neumann Architekturen generell ne andere Liga und für nen
> Bastler ne Nummer zu groß?

Nö. Die MSP430 sind in der gleichen Liga wie die AVRs.

von (prx) A. K. (prx)


Lesenswert?

Stefan schrieb:
> ARM Controller können meines Wissens nach auch Code aus dem RAM
> ausführen, nur etwas langsamer.

Eher etwas schneller. Auf Flash kann zwar parallel zu RAM zugegriffen 
werden, aber gelegentlich machen sich Waitstates bemerkbar. Manche ARM7 
können überhaupt nur im RAM ARM-Code ohne Handbremse ausführen, weil der 
Flash-Durchsatz für Thumb-Code optimiert ist.

von (prx) A. K. (prx)


Lesenswert?

Rudi schrieb:
> Als Anfänger würde ich mich btw nicht bezeichnen. Neben den AVR hatte
> ich beruflich auch schon mit einigen 32 Bit Architekturen, allerdings
> immer Harvard, zu tun.

Welche 32-Bit Architekturen haben denn - was die Adressräume angeht - 
eine Harvard-Architektur? Ob die internen Zugriffspfade auf einen 
einheitlichen Adressraum getrennt sind oder nicht ist für die hier 
betrachtete Frage irrelevant.

von Georg G. (df2au)


Lesenswert?

"Anfänger" war als "Anfänger mit x86" gemeint. Da gibt es n+1 
Stolperfallen, die einen "Anfänger" ganz schön demotivieren können.

von Arc N. (arc)


Lesenswert?

A. K. schrieb:
> Welche 32-Bit Architekturen haben denn - was die Adressräume angeht -
> eine Harvard-Architektur?

Theoretisch: AVR32, Cortex M3, Renesas RX, aber da

> Ob die internen Zugriffspfade auf einen
> einheitlichen Adressraum getrennt sind oder nicht ist für die hier
> betrachtete Frage irrelevant.

spielt dies keine Rolle.
Wenn ehe schon Atmel-Tools vorhanden sind, wäre hier ein AVR32 keine 
schlechte Wahl.

von Bronco (Gast)


Lesenswert?

A. K. schrieb:
> Die MSP430 sind in der gleichen Liga wie die AVRs.

Genau, der MSP430 hat einen gemeinsamen Adresseraum für RAM und Flash.
Mein geliebter PIC24 kann's leider nicht...

von (prx) A. K. (prx)


Lesenswert?

Arc Net schrieb:
> A. K. schrieb:
>> Welche 32-Bit Architekturen haben denn - was die Adressräume angeht -
>> eine Harvard-Architektur?
>
> Theoretisch: AVR32, Cortex M3, Renesas RX, aber da
>
>> Ob die internen Zugriffspfade auf einen
>> einheitlichen Adressraum getrennt sind oder nicht ist für die hier
>> betrachtete Frage irrelevant.
>
> spielt dies keine Rolle.

Aufgrund ebendieser Verwirrung mag ich die Begriffe Harvard- und 
von-Neumann-Architektur nicht sonderlich, weil sie meist implizit auf 
heute interne Busse statt auf Adressräume angewendet werden und 
dementsprechend sinnlos geworden sind. Siehe "Kritik" in 
Prozessorarchitekturen.

von DerDan (Gast)


Lesenswert?

ich vote auch für AVR32

von Malignes Melanom (Gast)


Lesenswert?

Du willst dein eigenes Board erstellen? Dann würde ich den 8051er 
nehmen. Das ist die einfachste und am schnellsten aufzubauende Variante 
(du brauchst nur die CPU, ein Latch (74HC573) und ein SRAM). Es gibt 
einen schönes Monitorprogramm dafür, damit kann man komfortabel 
Programme über RS232 hochladen, es ist ein Assembler drin, ein 
Hexeditor, alles was man so braucht:

http://www.pjrc.com/tech/8051/#paulmon

Der Vorteil gegenüber einer "richtigen" 8-bit CPU (6502, Z80) ist, dass 
der 8051 schon jede Menge nützliche Peripherie drin hat (Timer, UART, 
I/O Ports). Die müsstest du sonst als separate Chips mit draufpacken.

Gleichzeitig hast du aber die Flexibilität eines Datenbusses. Es hindert 
dich nichts daran, z.B. acht 82C55 I/O Chips anzuschließen wenn du 192 
I/O Pins brauchst ...

von Reinhard Kern (Gast)


Lesenswert?

Hallo,

der Hauptvorteil des 8051 ist, dass er zwar harvardmässig getrennte 
Adressräume hat, beide aber 8 bit breit sind und den gleichen Bus 
benutzen - unterschieden nur durch Read/Prog Enable. Man kann also Rom 
und Ram beliebig in beiden Adressräumen verwenden und extern einen 
Schalter einbauen, der die Zugriffe verodert, dann hat man ein System, 
das zwischen Harvard und von Neumann umschaltbar ist.

Gruss Reinhard

von Frank K. (fchk)


Lesenswert?

Du könntest Dich in die Z80-Welt begeben - aber mit modernen Mitteln.

Der alte Z80 war in den 80'er Jahren beliebt und wurde in CP/M-Maschinen 
genutzt, im ZX Spectrum und vielen anderen Rechnern. Üblicherweise lief 
der Prozessor damals mit 4 MHz.

Den originalen Chip lässt Du besser sein. Heutzutage gibts viel was 
besseres:
eZ80F91.

Schau hier:
http://www.zilog.com/index.php?option=com_product&Itemid=26&task=parts&BL=1&familyId=119&productId=EZ80F91

Die moderne Version ist ein Mikrocontroller im Gegensatz zu einem 
Mikroprozessor, hat einiges an Peripherie drin (auch Ethernet!), hat 
16MB linearen Adressraum(!), 256k Flash und läuft mit 50 MHz. Da klemmst 
Du dann beispielsweise ein 512k*8 SRAM an (z.B. AS7C34096A) und los 
gehts.

Der eZ80 ist LQFP144, das kann man auch noch selber löten.

fchk

von Wilhelm F. (Gast)


Lesenswert?

Reinhard Kern schrieb:
> Hallo,
>
> der Hauptvorteil des 8051 ist, dass er zwar harvardmässig getrennte
> Adressräume hat, beide aber 8 bit breit sind und den gleichen Bus
> benutzen - unterschieden nur durch Read/Prog Enable. Man kann also Rom
> und Ram beliebig in beiden Adressräumen verwenden und extern einen
> Schalter einbauen, der die Zugriffe verodert, dann hat man ein System,
> das zwischen Harvard und von Neumann umschaltbar ist.
>
> Gruss Reinhard

Meine 8051-Boards haben das fast alle, über Jumper auch konfigurierbar. 
Damit kann ich an meinen besten Boards 32k RAM als ROM nutzen, wie 
Flash. Und das ist beim 8051 schon was. Zum Programmtest ohne 
Stromabschaltung nur, aber das reicht so gut wie immer.

Im Augenblick mache ich mir Gedanken zum Reset, wenn es der Watchdog 
war, daß er im Bootloader wieder an die Zieladresse im RAM springt. 
Also, das ist im Detail auch kniffliger, als gedacht...

von Edson (Gast)


Lesenswert?

> RAM als ROM nutzen

Sehr fortschrittlich ;) Besser ist eigentlich nur noch das WOM...

von bko (Gast)


Lesenswert?

aber auch die 6502 Welt hat (noch) Mikrocontroller zu bieten

Western Design Center zum Beispiel:
http://westerndesigncenter.com/wdc/documentation.cfm

Oder von ehemals NECnunReneseas schon EOL aber noch zu kaufen:
http://www.renesas.eu/products/mpumcu/740/38000_740/3803h/index.jsp

von Jobst M. (jobstens-de)


Lesenswert?

Was ist mit dem 68k ? :-)


Gruß

Jobst

von Stefan F. (sfrings)


Lesenswert?

Ich würde einen 80186 oder einen 80188 (von Intel) nehmen.

von Wilhelm F. (Gast)


Lesenswert?

Edson schrieb:

> Besser ist eigentlich nur noch das WOM...

Wenn man keine Ahnung hat, sollte man, ..............

von keinLichtAufGing (Gast)


Lesenswert?

Hi,

@Rudi: Aus Deinen Postings folgt leider nicht, welche Werkzeuge Du zur
Verfügung hast. Was Du vorhast, war in den frühen 80ern als
Heimcomputer-Bau durchaus populär, ist aber inzwischen
ziemlich ausgestorben.

Du könntest ein Problem bekommen: Für einen "Minimal-PC" nimmt man
üblicherweise einen µP, keinen µC. Dem musst Du aber irgendwie ein
erstes Programm anbringen, mit dem er Dein eigentliches Programm
nachlädt (Bootstrap oder Urlader). Dafür gibt es mindestens drei
Wege:
1. EPROM oder Flash-Chip. Kann teuer werden, wenn das Werkzeug
   nicht ohnehin schon da ist.
2. Programmspeicher als Dual-Port-RAM auslegen und auf der zweiten
   Seite mit einem herkömmlichen µC befüllen. Nicht wirklich sinnvoll.
3. Einen 8052AH verwenden. Bringt ein internes BASIC mit.
   Inzwischen schwierig zu bekommen.

Nach meiner Erfahrung ist ein Mikrocomputersystem nicht schwerer zu
bauen als eine normale µC-Anwendung - nur zeitaufwendiger: Die
Kombination CPU+RAM+ROM(+Adresslatch)(+UART) bedingt einen ganzen
Haufen zu verdrahtender Chips, die eine Eurokarte schon füllen kann.
Im Forum wird ein solcher Aufbau auch leicht abfällig "Kuchenblech"
genannt.

Aus eigener Erfahrung drei Tipps:
1. Der Empfehlung von Malignes Melanom kann ich mich nur anschliessen.
   Für ein sehr brauchbares System brauchst Du nur
   80C31+74HC573+62256+27C256(programmiert)+MAX232+Kleinteile.
   Alles* problemlos zu beschaffen, nicht teuer und bastlerfreundlich
   im DIL-Gehäuse.
2. Nimm Dir für den Aufbau ein langes und verregnetes Wochenende -
   und alle Chips sockeln!
3. Mach eine Steckverbindung zwischen gemultiplextem Adress/Datenbus
   und Latch/Speichern. Ermöglicht a) verschiedene CPUs auszuprobieren
   und b) zusätzliche Peripherie einzubinden.

@Jobst M.: Das mit dem 68k war wohl ein Scherz oder? Zugegeben, sieht
im DIL64 beeindruckend aus, aber die Initialisierung ist nicht ganz
so trivial.

(*bis auf das programmierte EPROM...)

Grüssli

von Frank K. (fchk)


Lesenswert?

keinLichtAufGing schrieb:

> 1. Der Empfehlung von Malignes Melanom kann ich mich nur anschliessen.
>    Für ein sehr brauchbares System brauchst Du nur
>    80C31+74HC573+62256+27C256(programmiert)+MAX232+Kleinteile.
>    Alles* problemlos zu beschaffen, nicht teuer und bastlerfreundlich
>    im DIL-Gehäuse.

Nee. Kein UV-EPROM mehr. Nimm statt dessen einen EEPROM oder Flash. z.B. 
28C256 oder 29C256/29F256. Wahrscheinlich bekommst Du solch kleine 
Bausteine gar nicht mehr und musst auf ein 29F010 oder so ausweichen.

> @Jobst M.: Das mit dem 68k war wohl ein Scherz oder? Zugegeben, sieht
> im DIL64 beeindruckend aus, aber die Initialisierung ist nicht ganz
> so trivial.

Da hätte ich eher einen 68C332 vorgeschlagen. Der hat Peripherie drin 
und einen BDM-Port zum Debuggen und zum initialen Programmieren. Man 
muss es sich ja nicht unbedingt schwerer machen als nötig, sondern darf 
durchaus zeitgemäß arbeiten. Auch der von mir erwähnte eZ80 hat JTAG und 
Debug-Port, so dass es kein Huhn-Ei-Problem geben kann und man einfacher 
arbeiten kann.

fchk

von Jobst M. (jobstens-de)


Lesenswert?

keinLichtAufGing schrieb:
> @Jobst M.: Das mit dem 68k war wohl ein Scherz oder? Zugegeben, sieht
> im DIL64 beeindruckend aus, aber die Initialisierung ist nicht ganz
> so trivial.

Nein, das war eigentlich kein Scherz. Welche Initialisierung? Als 
16-jähriger habe ich auf dem Dings damals einfach drauflos programmiert.
Gibt es im übrigen auch in kleineren Gehäusen, z.B. PLCC68. Und wenn man 
lieber einen 8-Bit-Bus haben möchte, reicht auch der 68008 im DIP 48 - 
wenn man ihn noch bekommt.

Frank K. schrieb:
> Da hätte ich eher einen 68C332 vorgeschlagen.

Ich meinte eigentlich 68k als Familie. Ob das nun der 68000, 68008, 
68332, 68020, ColdFire oder DragonBall ist, ist doch egal.


Gruß

Jobst

von Washington I. (washington_i)


Lesenswert?

programmcode aus ram ausführen auf avr?

nichts neues! gibts schon laaange ;)

hier: Beitrag "Linux on AVR"

find ich immer noch herb diese idee, nem avr einen simm riegel 
spendieren und dann einen arm emulieren.

von Edson (Gast)


Lesenswert?

Wilhelm Ferkes schrieb:
> Edson schrieb:
>
>> Besser ist eigentlich nur noch das WOM...
>
> Wenn man keine Ahnung hat, sollte man, ..............

Wenn man keinen Humor hat, sollte man das manchmal auch.

Ach ja, ASM-Beispiel lädt einen (hartcodierten) Code ins RAM eines 
STM32F100RB (aktiviert LED an PC9):
1
    ldr     r2, = 0x20000401    ;r2 zeigt auf RAM
2
    
3
    mov32   r1, #0xF0216901
4
    str     r1, [r2, #-1]
5
    mov32   r1, #0xF4417100
6
    str     r1, [r2, #3]
7
    mov32   r1, #0x61017100
8
    str     r1, [r2, #7]
9
    mov32   r1, #0x69014770
10
    str     r1, [r2, #11]
11
    
12
    blx     r2

von keinLichtAufGing (Gast)


Lesenswert?

Hi

@Frank K.: "Nee. Kein UV-EPROM mehr."
Das war genau der Punkt, den ich mit "Werkzeug da" meinte.
Da ich ohnehin Brenner und Mäusesolarium habe, stellt
sich das Huhn-Ei-Problem für mich nicht. Für die µPs, die
ich häufiger nutze, habe ich ohnehin immer ein EPROM mit
Urlader in der Schublade.

Soweit ich sehe, gibt es den 68C332 nur in SMD-Form. Das
finde ich nicht mehr so bastlerfreundlich, auch wenn es
zur Not Adapterplatinen gibt.

@Jobst M.: Ich dachte daran, dass der 68000 beim Start
zuerst zwei Datenworte einliest, dann dann den Einsprungvektor
setzt und...

Grüssli

von Frank K. (fchk)


Lesenswert?

Jobst M. schrieb:

> Frank K. schrieb:
>> Da hätte ich eher einen 68C332 vorgeschlagen.
>
> Ich meinte eigentlich 68k als Familie. Ob das nun der 68000, 68008,
> 68332, 68020, ColdFire oder DragonBall ist, ist doch egal.

Eben nicht! Du unterschätzt die Nützlichkeit des BDM-Ports. Wenn man das 
kennen gelernt hat, will man nicht mehr darauf verzichten.

fchk

von Jobst M. (jobstens-de)


Lesenswert?

keinLichtAufGing schrieb:
> @Jobst M.: Ich dachte daran, dass der 68000 beim Start
> zuerst zwei Datenworte einliest, dann dann den Einsprungvektor
> setzt und...

Wie das genau war, kann ich mich gerade gar nicht mehr erinnern, aber 
auch das war machbar.

Frank K. schrieb:
> Eben nicht! Du unterschätzt die Nützlichkeit des BDM-Ports. Wenn man das
> kennen gelernt hat, will man nicht mehr darauf verzichten.

Doch! Meinte ich trotzdem so!
Und ich hasse Nabelschnüre in laufende Systeme.


Gruß

Jobst

von Reinhard Kern (Gast)


Lesenswert?

keinLichtAufGing schrieb:
> (Bootstrap oder Urlader). Dafür gibt es mindestens drei
> Wege:

Das ist ja alles schon richtig modern. Bei den ersten PDPs ging das 
meiner Erinnerung nach noch so: mit einem Schalterfeld auf der 
Frontplatte konnte man die ersten 256 Byte Bit für Bit beschreiben, mit 
diesem Progrämmchen konnte man dann einen leistungsfähigeren Urlader auf 
Lochstreifen einlesen, und dann gings richtig los...

Für die Lochstreifen gab es kleine Handstanzen aus einer Platte mit 8 
Löchern und einem bleistiftähnlichen Werkzeug, um die Löcher 
durchzustossen.

Ein Eprom einzusetzen geht da schon wesentlich schneller. 
Monitorprogramme für serielle Schnittstelle gabs auch fast für alles, 
manche findet man sicher noch in alten Unterlagen.

Gruss Reinhard

von Bronco (Gast)


Lesenswert?

Jobst M. schrieb:
> Ich meinte eigentlich 68k als Familie.

Jau, wir bauen einen neuen Amiga ;)

von Weingut P. (weinbauer)


Lesenswert?

mal ne blöde Frage ... was macht denn die PC-Ähnlichkeit aus?

PC hat n BIOS für den Start, der Rest wird aus der Peripherie 
nachgeladen,
was spricht dagegen nen AVR zu nehmen, Bootloader drauf und einfach per 
UART oder meinetwegen von ner SD-Karte die jeweilige Anwendung zu 
flashen?

von Edson (Gast)


Lesenswert?

> was spricht dagegen nen AVR zu nehmen, Bootloader drauf und einfach per
> UART oder meinetwegen von ner SD-Karte die jeweilige Anwendung zu
> flashen?

Zum Beispiel, dass die Speicherzellen nicht unendlich oft beschreibbar 
sind. Teilweise sind es nur 10k Schreibzyklen, die garantiert werden. 
Die Lösung würde also maximal einem "PC" mit ner fast gestorbenen SSD 
entsprechen, da wird die Akzeptanz nicht allzu hoch sein.

von jgdo (Gast)


Lesenswert?

@Rudi

Nimm irgendeinen ARM, die können alle Code aus dem RAM ausführen, 
solange er reinpasst. Die Sachen mit 8051, 68k usw sind zwar alle gut 
gemeint, aber bei einem Cortex hast du einfach auf dauer mehr davon, als 
wenn du einen fast ausgestorbenen Prozessor nimmst. Es gibt vor allem 
auch günstige, fertig aufgebaute Boards, wo man bei der Hardware nicht 
mehr falsch machen kann.

- jgdo -

von NopNop (Gast)


Lesenswert?

Die Piccolos von TI bieten das auch...

von Malignes Melanom (Gast)


Lesenswert?

Naja, wenn man was fertiges kauft, dann kann man ja gleich ein altes 
Laptop nehmen ...

Die Hardware beim 8051 ist jedenfalls unschlagbar simpel, das kann man 
auch auf dem Steckbrett aufbauen:

http://www.pjrc.com/tech/8051/pm2_docs/hardware.html

Vor allem haben viele 8051 einen seriellen Bootloader, so dass man nicht 
mal einen Programmer braucht. Einfach an die RS232 vom PC anschliessen 
und los gehts.

von Malignes Melanom (Gast)


Lesenswert?

Ein weiterer Aspekt ist noch, dass der 8051er mit PAULMON autark ist, 
d.h. mann kann die Programme in Assembler direkt auf dem Controller 
schreiben, der PC dient nur als Terminal. Das würde auch am ehesten der 
Anforderung als "minimaler PC" entsprechen.

von Mikel M. (mikelm)


Lesenswert?

Könntest dir auch mal den Propeller anschaun. Evt den Hive zum 
selberbaun, da sind 3 Propeller drauf. Der Propeller läd, falls 
vorhanden beim Start aus einem externen Eeprom sein Programm oder über 
die serielle.

http://hive-project.de/board/index.php

von U. B. (Gast)


Lesenswert?

Mikel M. schrieb:
> Könntest dir auch mal den Propeller anschaun.

Sicher kein Fehler, der Propeller ist ein interessanter Chip, aber ob 
der Propeller die passende Antwort zur threadgewordenen Aufgabenstellung 
ist, benötigt nochmal genaueres Hinschauen.

Der Propeller kann nativen Code nur in den 8 Cogs (à 2kBytes RAM) 
ausführen.

Was scheinbar in Hub-RAM (32kBytes, nicht erweiterbar) oder externem 
Speicher (von EEPROM, SRAM bis SD-Karte) ausgeführt wird, basiert auf 
kleinen VMs, die dann Instruktionen aus dem Hub-RAM holen und 
interpretieren (LMM) oder aus extern angedrahtetem Medium (XMM).

Wenn es nicht zwingend notwendig ist, daß der aus dem RAM auszuführende 
Code der mit voller Geschwindigkeit auszuführende native Maschinencode 
des Propellers ist, dann eignet er sich prima für Soetwas.

Mit "normalen" CPUs statt MCUs kommt man aber hier meiner Meinung nach 
deutlich weiter... MCUs können dabei gut diverse Subaufgaben übernehmen, 
z.B. der Propeller als Terminal oder Graphikkarte, ...

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
Noch kein Account? Hier anmelden.