mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Stack Maschine


Autor: Lupin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gibt es eine standard stack machine architektur, für die es compiler
gibt und die sich leicht auf einen Mikrocontroller implementieren
lässt?

Forth ist ja auch eine stack machine, ist aber zu komplex glaube ich.
Vor allem gefällt mir die sprache an sich nicht :)

Am besten wäre ein C ähnlicher compiler der in einen einfachen code
kompiliert und eine virtuelle maschine die ich auf dem controller in
ASM implementieren kann (also keine riesigen Klassen/Funktionen/etc wie
bei Java).

Ich könnte auch einen compiler für eine richtige CPU nehmen und die
emulieren, das müsste dann aber eine extrem einfache CPU sein.

Hat da jemand eine Idee?

Autor: Christoph Kessler (db1uq) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hatte auf dem AIM-65 (6502-Prozessor) damals (1979/80) auch ein
Forth, das hatte 4 kByte.
Eigentlich fand ich die umgekehrt polnische Notation von meinem HP25
ganz praktisch und leicht verständlich, aber mit Forth habe ich auch
nichts anfangen können.

Autor: Philipp Sªsse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Forth ist die wohl einfachste Stackmaschine, mit der man arbeiten kann
(man muß ja nicht den ganzen ANSI-Standard implementieren). Da ist
nichts komplex, höchstens ungewohnt.

Was Du möchtest, ist dagegen extrem komplex: C wurde für "normale
Registerarchitekturen" geschrieben, aus C-artigem Code
Stackmaschinencode zu compilieren, ist ein gewaltiger Aufwand, viel
schwieriger als einen normalen C-Compiler zu schreiben. Wer würde sich
diesen Aufwand antun für die paar Stackprozessoren, die es gibt? Und
welchen Sinn hätte es, mit großem Aufwand aus C Stackcode zu
generieren, um diesen dann wieder mit Aufwand auf einem gewöhnlichen
Controller in einer emulierten Stackmaschine laufen zu lassen?

Eher könntest Du es mit Lisp versuchen, das ist ja ein bißchen wie
"Forth rückwärts" von der Syntax. Aber das wird Dir dann ja wohl auch
nicht gefallen.

Ein Forth-Interpreter/Compiler samt Stackmaschine braucht dagegen nur
ein paar hundert Byte und wird dann in sich selbst weitergeschrieben.
So einfach, so elegant, so schön. Saß neulich noch in einem Seminar
über Embedded-Software-Tests und dachte die meiste Zeit: "wie einfach
ist das doch dagegen mit Forth!". Man muß sich einfach nur einmal
darauf einlassen, daß Sprachen nicht prozedural (oder objektorientiert)
sein müssen, daß Variablen, Operatoren und Programme eigentlich alles
dasselbe sind und daß wir nur wieder lernen müssen, Programme so zu
schreiben, wie wir denken statt so, wie man es uns antrainiert hat.
Aber gegen die Macht der Gewohnheit kommt man mit Argumenten ja sowieso
nicht an ... )-: Nichts für ungut.

Also bleibt für Dich wohl nur so eine Minimal-Java-Maschine. Google
hilft Dir weiter.

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@db1ug: Waren 2 ROMs, also 8KB.

@Lupin: Stack-Maschinen in Hardware sind schwer aus der Mode gekommen,
ausgenommen zur Unterstützung von Java Bytecodes. Sind zwar im Prinzip
sehr einfach zu implementieren, aber mit heutiger Technik viel zu
ineffizient.

Autor: thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Man könnte es vielleicht so sagen:

Die Java Fritzen wollten Forth verwenden , durften das aber nicht sagen
:)))))....

Es gibt kaum etwas einfacheres als Forth.


Gruß Thomas

Autor: Hans-Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Lupin,

da gab es vor vielen vielen Jahren, in der Anfangszeit von Pascal so um
1976, den P4-Pascal-Compiler, der einen P-Code für eine virtuelle
Maschine erzeugt hat. Es handelt sich um eine 16bittige Stack-Maschine
die sich meinererachtens gut auf einem uController interpretieren
lassen müßte. Du könntest auch aus dem P-Code direkt den Maschinencode
deines uC erzeugen. Ich habe das mal für den 68000 gemacht.

Den Source für den Compiler und den Interpreter der P-Codes, selbst in
Pascal geschrieben, findest Du hier, auch die Beschreibung der P-Code
Maschine:

http://homepages.cwi.nl/~steven/pascal/

Mit "P4 Pascal" läßt sich manches ergooglen.

Dann gab es sogar "Concurrent Pascal", das Nebenläufigkeit
ermöglichte und auf einem erweiterten P-Code aufsetzt.

Gruss
Hans-Christian

Autor: Christoph Kessler (db1uq) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@A.K. stimmt, der Assembler hatte 4k , Basic und Forth je 8, die Eproms
mit 4 k kosteten über 100 DM. Und die ROMs gingen gern mal kaputt

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ROM des Jupiter Ace, ein Z80-"home computer" aus den frühen 80ern,
der als einziger von Hause aus mit Forth arbeitete, war auch 8 kByte
groß.

Mittlerweile existieren Schaltpläne und auch kommentierte
Assemblerlistings des ROMs dieses "Schätzchens". Genügend Masochismus
vorausgesetzt, lässt sich damit ja vielleicht was anfangen.

@Hans-Christian:
Hat dieses Pascal irgendeine Verwandtschaft zum UCSD-Pascal? Mit dem
musste ich mir mal auf einem Apple II die Finger beim Diskettenwechseln
brechen ...
Wenn ich mich recht erinnere, verwendete auch dieses eine virtuelle
P-Maschine.

Autor: Ingo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klassische Stack Maschinen waren die Transputer von Inmos. Dazu gab es
C-Compiler und OCCAM. Von OCCAM gibt es auch noch freie
Implementierungen. ggl mal danach.

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nicht ganz so klassisch - ein Stack mit 3 Speicherplätzen war doch arg
wenig. Und die Transputer waren dermassen strikt auf Occam optimiert,
dass Befehle und Funktionalitäten, die für C wichtig waren, für Occam
aber nicht, komplett fehlten und C-Compiler dementsprechend ineffezient
waren.

Autor: Hans-Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Rufus
Ja, das UCSD-Pascal auf dem AppleII basiert auf dem P-Code-Pascal. Wenn
der P-Code Interpreter auf dem 6502 läuft, sollte auch jeder moderne uC
(mit ausreichend Speicher) genügen.

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.