Forum: Mikrocontroller und Digitale Elektronik Hilfe zu Forth !!!!


von Dirk (Gast)


Lesenswert?

hallo Forumgemeinde,

ich brauche etwas Hilfe zu Forth. Ich komme nicht so ganz mit den 
Wörtern klar. Ich habe natürlich eine Word-Liste aber die ist natürlich 
auch auf Englisch. Ich würde gerne mal wissen wie groß der Adressbereich 
ist. Wenn z.B. der Stack leer ist. Dann geben ich z.B. 1 ein, dann 2 und 
dann 3, 4, 5, 6. Das heißt ich habe ganz unten die eins und am TOS (top 
of stack) die 6. Jetzt möchte ich mit dem Befehl SP@ auf die 2 
zugreifen, und auf TOS legen. Aber ich bekomme das irgendwie nicht hin. 
Ich bekomme immer nur komische Zahlen. Ich glaube es liegt auch daran 
das ich eigentlich gar nicht weiß wie groß die Adressen für eine 
eingegebene Zahl ist. Mir ist auch nicht so der unterschied zwischen @ 
und SP@ klar.
Hat von euch jemand Ahnung wie das geht oder wo ich eventuell eine gute 
Beschreibung zu den Wörtern bekomme?
Danke für eure Mühe und einen schönen Abend noch…
Gruß Dirk

von Εrnst B. (ernst)


Lesenswert?

Wow. es gibt noch Forth-Programmierer?

die Adresse von Stack-Werten kannst du dir glaubich nicht ausgeben 
lassen, aber um auf "tiefer" am Stack versteckte Werte zuzugreifen gibt 
es "PICK"
1 2 3 4 5 2 PICK .
Gibt "3" aus.

Ansonsten Google nach "Forth Tutorial" findet >1Mio Seiten... vielleicht 
ist ja was brauchbares dabei ;)

/Ernst

von Thomas S. (Gast)


Lesenswert?

Stackgröße + ähnliches ist bei Forth sehr stark implementationsabhängig. 
Sollte also in der Dok der verwendeten Systems enthalten sein.

Gruß Thomas

von cappelone (Gast)


Lesenswert?

SP@ gibt die Adresse des Top of Stack auf den Stack ( --- addr) was man 
dann damit machen kann ist implementationsabhängig da Stack Richtung 
grösserer oder kleinerer Adressen wachsen kann .
@ holt Wert aus Speicheradresse in Top of Stack   ( addr --- wert).

Ansonsten www.forth-ev.de

von Dirk (Gast)


Lesenswert?

Alles klar,
ich habe es jetzt, glaub ich, kappiert. Wenn ich jetzt z.B. 6 Zahlen 
eingeben (1, 2, 3, 4, 5, 6)die jeweils ein Byte haben, kann ich mit dem 
Befehl: sp@ 4 2@ den Stackpointer erst mal auf TOS bringen, dann um 4 
Byte nach unten setzen und dann die nächsten 2 Byte auf TOS holen, so 
richtig??

Danke noch mal für eure mühe!!!
Gruß Dirk

von neuer (Gast)


Lesenswert?

hallo, mit welchen forth arbeitest du??

mfg

von Dirk (Gast)


Lesenswert?

Hmm, das weiß ich nicht so genau. Es startet mit "THE UNIFORTH SAMPLER" 
von Unified Software Systems. Das haben wir in der Vorlesung zur 
verfügung gestellt bekommen.

Grüße :o)

von Max Murks (Gast)


Lesenswert?

Versuch das Buch 'Programmieren in Forth' von Leo Brodie ISBN 
3-446-14070-0 zu bekommen. Gibt es zwar schon lange nicht mehr, ist aber 
ein Super Forth-Buch für Anfänger bis Profie. Besonders interresant ist 
der interne Aufbau von Forth, und das jahrelang vor Smalltalk oder Lisp.

von Dirk (Gast)


Lesenswert?

Recht herzlichen Dank für den Tip!!!

Schönen Abend noch und Grüße,

Dirk

von cappelone (Gast)


Lesenswert?

@Dirk Post von 17:55
sp@ 4 2@   gibt die Aktuelle Stackadresse und darüber das 32bitWort von 
Adresse 4 auf dem Stack
Das von Dir beschriebene Verhalten hat   sp@ 4 - @

von Mia (Gast)


Lesenswert?

Warum benutzt du nicht einfach PICK? SP@ gehört AFAIK nicht zum Standard 
ANS Forth.

BTW: Ich emphehle: http://www.forth.com/forth/fph.html
Das Buch ist der Hammer! Anhand dieses Buchen konnte ich nicht nur (ohne 
Vorkenntnisse) relativ schnell FORTH lernen, sondern habe auch ein 
portables Forth-System in C geschrieben.

von cappelone (Gast)


Lesenswert?

Pick in fig forth
: PICK          DUP + SP@ + @ ;

SP@ kann man zb gebrauchen wenn man den n_obersten Datenstackwert 
ersetzen möchte. Oder man braucht 32bitwert an n. Oder ... .  Das ist ja 
grad eine Stärke von Forth . Code ergibt sich eigentlich aus dem von 
PICK.

Natürlich nicht Standart. Es gibts Fortsysteme deren Datenstack nicht im 
von @ erreichbarem Adressraum liegt, dann muss PICK anders aussehen.

von Schmitt A. (andrea83)


Lesenswert?

ich will  in Forth einen Befehl TWIDDLE der die Daten (256
Gleitkkommazahlen)
im Eingabefeld in bitreverse order umsortiert.
So dass die Beschreibung:
TWIDDLE adr— Umsortierung in bitreverse order gilt, BSP: FFT IN TWIDDLE
3

MFG
Andrea

von Schmitt A. (andrea83)


Lesenswert?

ich will  in Forth einen Befehl TWIDDLE der die Daten (256
Gleitkkommazahlen)
im Eingabefeld in bitreverse order umsortiert.
So dass die Beschreibung:
TWIDDLE adr— Umsortierung in bitreverse order gilt, BSP: FFT IN TWIDDLE
3

MFG
Andrea

von Karl H. (kbuchegg)


Lesenswert?

Ist ja schon gut.
Offenbar gibt es hier niemanden, der gut genug Forth kann um dir deine 
Hausaufgaben zu erledigen.

Vielleicht weiß aber auch nur niemand, was eine 'bitreverse order' 
eigentlich ist.

von Mark B. (markbrandis)


Lesenswert?

Vielleicht will sie ja einen DSP in Forth programmieren :-)

von Stefan B. (stefan) Benutzerseite


Lesenswert?

'bitreverse order' mit drei Bits

http://www.mathworks.com/access/helpdesk/help/toolbox/dspblks/ug/f15-8003.html

Andrea hat anscheinend acht Bits (256 Indices).

Mir ist der Forth Teil unklar.

> BSP: FFT IN TWIDDLE 3

Könnte ich mir zusammenreimen mit Werte (FFT) einlesen (IN) und dann das 
neue Wort (TWIDDLE) darauf anwenden. Was hat die 3 (adr-) zu sagen?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Die Dame hatte doch diese Hausaufgabe neulich schon mal gepostet.
Scheint ja zwischendurch noch nicht wieder ernsthaft drüber
nachgedacht zu haben.

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.