FORTH Beispiel

YMMD

Saludos Wolfgang

Hab mal gehört: eine Harley ölt nicht, sie markiert ihr Revier :-)

Deine Enfield Diesel kann da sicher noch mehr markieren, besonders, wenn Du 'Vollgas' hüstel Vollöl gibts.

--
Meine 7 Sinne:
Unsinn, Schwachsinn, Blödsinn, Wahnsinn, Stumpfsinn, Irrsinn, Lötzinn.
Wolfgang Allinger   Paraguay             reply Adresse gesetzt !
ca. 15h00..21h00 MEZ  SKYPE:wolfgang.allinger
Reply to
Wolfgang Allinger
Loading thread data ...

Damit man was zum Poppen hat. SCNR

--
Gruß, Raimund
Mein Pfotoalbum 
Mail ohne Anhang an  wird gelesen. Im Impressum der Homepage
findet sich immer eine länger gültige Adresse.
Reply to
Raimund Nisius

snipped-for-privacy@spambog.com (Wolfgang Allinger) schrieb:

Ich habe selbst Software in dem Stil weiter pflegen

*dürfen* . Ich hätte diese Dilettanten alle ermorden wollen, die so einen Misthaufen hinterlassen haben. Zu deren Glück waren sie aber nicht mehr greifbar. Wenn Adresse 0 (NULL) wichtig ist, dann bitte so:

/* ganz lange Erklärung warum das so ist und was es mit Adresse 0 auf sich hat und warum sie nichts mit der NULL Definition des Compilers zu tun hat

*/

Dann:

#define RESET_VECTOR 0

void DoReset() { // Noch 'ne Erklärung hier (*(void(*)()) RESET_VECTOR)(); }

Aber die Art und Weise sie aufzurufen!

Hajü

Reply to
Hans-J. Ude

Hi Frank,

Das ist das ewige Drama von Dogmen. Wenn man sich diesen sinfrei unterwirft, macht man Klimmzüge, um irgendwie drum herum zu kommen, in der Hoffnung, dass es keiner merkt. Der "Erfinder" von (*(void(*)())0)() wusste gut, dass er einfach goto 0 schreiben hätte können, aber jeder hätte sofort gesagt:"Das ist schlechter Stil, so programmiert nur ein Amateur" (*(void(*)())0)() hingegen sieht einfach nur schick aus. selbst gefuchste Reviewer ziehen davor doch den Hut, oder?

Marte

Reply to
Marte Schwarz

Marte Schwarzschrieb: "

Nicht ganz. Der Aufruf von (*(void(*)())0)() und goto 0 ist natürlich schon ein Unterschied. Sinn macht das, wenn man die ISR-Table in einem Array im RAM hat, weil man die z.B. zur Laufzeit verschieben oder ganz einfach zur Laufzeit ändern möchte, sie also nicht hard-codieren kann. Zwar soll die 0 (Reset) in der Regel nicht zurückkehren, andere ISRs aber schon und fürs Debugging kann das auch für 0 (Reset) sinnvoll sein.

Dirk

Reply to
Dirk Ruth

...

Ey hömma! In der Enfield ist kein mittelalterlicher Ami-Gußeisenhaufen, in der Enfield *schlägt* ein Herz aus einer weltbekannten italienischen Triebwerksmanufaktur!!1 Wie bei Lamborghini, Ferrari oder Vespa ;-)

Auf der ersten Probefahrt wollte ich einem Harley-Fahrer helfen. Er hatte aber nur noch ein paar 100m zu schieben. Die Batterie war trocken! Fährt das Ding elektrisch oder was wollen die nur beweisen, daß man auch ohne Elektronik fatale Ausfälle durch Strom verursachen kann?

Falk

formatting link

Reply to
Falk Willberg

Wolfgang Allinger wrote: [Erklär mal, was (*(void(*)())0)() macht :-)]

Wenn FORTH das wirklich ohne zu murren akzeptiert, hat es das Attribut "Hochsprache" nicht verdient. Ein numerisches Literal kommentarlos als Sprungadresse zu interpretieren gehört sich einfach nicht. Damit kann man ja wunderbar jegliche Konsistenzprüfungen aushebeln. Wird nicht die Möglichkeit der interaktiven Ausführung immer als Vorteil von FORTH angepriesen? Und dann darf der Nutzer da mittels "12345 >R EXIT" an beliebige Adressen springen? Ich darf doch stark bitten.

In C ist das Gewürge mit den Klammern auch nur dazu da, den Compiler davon zu überzeugen, jetzt bitte mal keine Konsistenzprüfungen zu machen, und das Literal _wirklich_ als Funktionszeiger zu akzeptieren.

Abgesehen davon ist das nun wirklich kein häufiger Anwendungsfall, der darf hässlich aussehen. Wenn du das häufiger brauchst, definierst du eben ein paar schöne Worte dazu, zum Beispiel typedef void (*funptr_t)(); const funptr_t RESET = (funptr_t) 0; const funptr_t SYSCALL = (funptr_t) 5; // ... RESET();

Stefan

Reply to
Stefan Reuther

Ich würde sagen: der Erfinder von '(*(void(*)())0)()' wusste gut, dass das syntaktisch korrektes C ist, wohingegen 'goto 0' ein Syntaxfehler ist.

gcc akzeptiert als Erweiterung 'goto *0'; das ist aber bei weitem nicht so weit verbreitet wie das "korrekte" Verhalten bei einem aufgerufenen Nullzeiger. Letzteres ist formal undefiniertes Verhalten, wird aber von allen mir bekannten Compilern auf die "erwartete" Weise umgesetzt.

Stefan

Reply to
Stefan Reuther

Das ist einer der Nachteile von Forth. Gibt zwei Stacks: den Return Stack und den Daten Stack. Auf beiden werden nur Zahlen in der sogenannten Cell-Bitbreite des Forth-Systems abgelegt. Was die für Bedeutungen haben, ist dem Programmierer überlassen. Es ist auch allgemein üblich, den Return Stack als Zwischenspeicher für Werte zu verwenden, um das Stack Jonglieren auf dem Daten Stack zu reduzieren. Daneben gibt es meist noch den Floatingpoint Stack. Dafür gibt es extra Befehle, die teilweise die Befehle für den normalen Daten Stack duplizieren, aber leider nicht alle.

Factor räumt mit einigen dieser Nachteile auf, ohne dabei auf viele Vorteile von Forth zu verzichten:

formatting link

Braucht allerdings auch viel mehr Resourcen, also eher nicht für Microcontroller geeignet.

--
Frank Buss, fb@frank-buss.de
http://www.frank-buss.de, http://www.it4-systems.de
Reply to
Frank Buss

Kann ich Dir voll nachempfinden, habe sowas auch schon öfter erlebt.

Der krasseste Fall: Bin mal bei einem Kunden gegangen, nachdem ich eine IR-Service Routine samt den Übergeordneten Zugriffs und Initialisierung Routinen auf die Daten eines ADC in 8031 Assembler abgeliefert hatte: das Programm ist ja riesig geworden, 12 Seiten lang... wie, das ergibt nur knapp 400 byte Object? Ansonsten nur Beschreibungen und Kommentare? Und was soll das mit dem Pseudo-Code? Also wenn Sie hier im Hause weiterarbeiten wollen, dann müssen Sie von Ihrem sicherlich hohen Standard runterkommen und so schreiben, wie unsere Leute, sonst verstehen die das nicht und können es nicht warten. Keine Rede davon, dass man besser die eigenen Leute schulen sollte, damit sie auf meinen Standard kommen. Ich habe dankend abgelehnt, für sowas gebe ich mich nicht her. Das wars dann. 3 Jahre später gingen die in Konkurs. War eine über 50 Jahre alte Firma, die früher mal excelente Messgeräte gebaut hat, aber dann durch den Dilettantismus der uC Entwickler und deren Chef-Idioten von der Entwicklung zu Grunde gerichtet wurde.

Du hast ja Recht und ich zuwenig Ahnung von C. Mir wurde damals gesagt, geht nicht anders... Und so ein undurchsichtiger Kram war einer der Hauptgründe, dass ich mich nicht weiter damit beschäfftigt habe.

Also waren die Schreiber die typischen 'Genies', die glauben, ohne Dokumentation auszukommen: If it was hard to write, it should be hard to read.

Saludos Wolfgang

--
Meine 7 Sinne:
Unsinn, Schwachsinn, Blödsinn, Wahnsinn, Stumpfsinn, Irrsinn, Lötzinn.
Wolfgang Allinger   Paraguay             reply Adresse gesetzt !
ca. 15h00..21h00 MEZ  SKYPE:wolfgang.allinger
Reply to
Wolfgang Allinger

Du darfst sogar -1 @ eingeben und Dich wundern, was passiert. Habs schon lange nicht mehr auf einem PC gemacht :-) Und ich könnte auch schreiben:

CODE reset 0 jp END-CODE

oder noch besser, damit man sieht, das es was besonderes ist, was tief in die HW eingreift

CODE [reset] 0 jp END-CODE

Mit den [ ] werden bei guten Fortlern massive Eingriffe/Operationen sehr nahe an der HW angezeigt.

Wenn ich das gemacht hätte, dann wäre wieder das Geschrei gekommen, in C hätte man ja auch inline Assembler nehmen können, aber das ist nicht HLL!!!

Hochsprache heisst für mich: es soll Dir die Arbeit erleichtern. Das ich im Ernstfall sowas machen kann, aber nicht muss, steht auf einem anderen Blatt. Und auf die obigen Konstruktionen kommt sicher kein Anfänger, aber er kapiert sofort, was es macht, wenn er es sieht. (na gut, jetzt nicht mehr, da irgend ein quoting die Leerzeichen kassiert hat :-)

Nur wer mindesten 3 Arten des Missbrauches kennt, beherrscht sein Werkzeug wirklich!

Hochsprache heisst nicht, das ich gefesselt und geknebelt in einem Gummianzug an ein Andreas-Kreut gefesselt bin und eine C-Domina in Leder schwingt die Peitsche. SM iss nicht mein Fall, aber die Geschmäcker sind verschieden, deshalb haben Dominas auch ein gutes Einkommen.

Siehste, das bestätigt wieder den alten Spruch (nicht von mir, aber gut)

Bei C hat der Programmierer den Compiler im Kopf, bei Forth hat der Programmierer den Compiler im Target :-)

Kann, muss aber nicht.

Lieber mehr Kommentar als weiter undurchsichtiger Kram... :-)

BTW der SYSCALL muss wirklich ein CALL sein, der RESET eigentlich nur ein JUMP, aber der Stack sollte eh am Anfang der Reset-routine genauso gesetzt werden, wie ein echter RESET, sonst gibbet viele nette Randeffekte, die u.U. jahrelang lauern.

Bei allen meinen Anwendungen zeigt der Reset Vektor auf eine Programmstück, wo die gesamte HW genau in den Zustand gebracht wird, wie nach einem harten Reset. Das spart viel Verdruss.

Saludos Wolfgang

--
Meine 7 Sinne:
Unsinn, Schwachsinn, Blödsinn, Wahnsinn, Stumpfsinn, Irrsinn, Lötzinn.
Wolfgang Allinger   Paraguay             reply Adresse gesetzt !
ca. 15h00..21h00 MEZ  SKYPE:wolfgang.allinger
Reply to
Wolfgang Allinger

Kein Stueck Autobahn dabei, wo Du mal volle Suppe aufdrehen kannst? Hier dachte jemand 190mph sei schnell, bis eine Hayabusa vorbeizischte:

formatting link

Die Tachonadel ist auch etwas nervoes, mal den magnetischen Mitnehmer putzen. Das Enfield Motorgeraeusch ist allerdings echt gediegen, schoen.

Er hatte wohl ziemliche Probleme, ueberhaupt loszuduesen:

formatting link

Allerdings sollen auch beim Anlassen von Harleys schon Leute ueber die Lenkstange geflogen sein.

--
Gruesse, Joerg

http://www.analogconsultants.com/

"gmail" domain blocked because of excessive spam.
Use another domain or send PM.
Reply to
Joerg

...

Ab 5:30 geht's über ein Stück Landstraße. Da *habe* ich volle Pulle aufgedreht.

Den Fahrtindikator ignoriere ich. Der Fahrradtacho, übrigens das komplexeste Stück Elektronik an dem Mopped, ist nicht im Bild.

Mal sehen, was der Indschenjör bei der Hauptuntersuchung dazu sagt ;-)

Falk

--
GG Art. 5 - Eine Zensur findet nicht statt
https://secure.wikileaks.org/wiki/Deutsche_Wikileaks_Domain_ohne_Vorwarnung_gesperrt
http://blog.fefe.de/?ts=b727b1b0
Reply to
Falk Willberg

Oh. Jetzt verstehe ich Deine normale Sig Line. Ich fahre aber auch nicht mehr so schnell wie frueher in Deutschland. Sonst waere mein amerikanischer Fuehrerschein futsch :-)

Sowat hamwa hier nich.

--
Gruesse, Joerg

http://www.analogconsultants.com/

"gmail" domain blocked because of excessive spam.
Use another domain or send PM.
Reply to
Joerg

[...]

Das heißt für mich im Zweifelsfall, dass der Nutzer keinen vollständigen FORTH-Interpreter bekommen darf, womit dieser Vorteil von FORTH hinüber wäre.

Es geht ja nicht nur darum, dass der Nutzer sich damit "selber ins Knie schießen" kann, sondern auch z.B. darüber aus einem funktionierenden Gerät einen Garantiefall machen kann, um ein neues Gerät zu bekommen, weil ihm beim alten das Gehäuse zu verkratzt ist. Einfach einen Sprung in die "lösche Programmspeicher"-Routine codieren, und das Ding als "geht nicht mehr einzuschalten" zurücksenden.

Erfahrung? :-)

Ansonsten bevorzuge ich ein bisschen "bondage & discipline" in der Programmiersprache durchaus, wenn die Projekte eine gewisse Komplexität erreichen. Wenn ich 8 Stunden an einem 5000-Zeilen-Modul sitze, darf mich der Compiler gerne darauf hinweisen, wenn ich versehentlich, z.B. durch einen Tippfehler, eine Operation codiere, die so keinen Sinn ergibt. Zum Beispiel, wenn ich versuche, den Wasserstand eines Rauchmelders abzufragen. So eine Operation zurückzuweisen ist in deinem natürlichsprachlichen FORTH auch nicht wirklich drin.

In einem 8-bitter wöllte ich keinen Compiler. Und alles größere ist groß genug für Lua oder Scheme :-)

Idealerweise finden sich solche Adressen in einem Header, der einmal geschrieben und dann wiederverwendet wird. Dann muss man sich nicht ständig damit befassen.

Stefan

Reply to
Stefan Reuther

In article , Joerg writes: |> Falk Willberg wrote: |> > |> > Mal sehen, was der Indschenjör bei der Hauptuntersuchung dazu sagt ;-) |> |> Sowat hamwa hier nich.

Für variable Definitionen von "hier" -- NJ hat sowas, wenngleich die Überprüfung eher kosmetischen als technischen Charakter hat...

Rainer

Reply to
Rainer Buchty

Rainer Buchty schrieb:

In meinem "hier" habe ich mehr als einmal erlebt, daß die HU eher bürokratischen als technischen Character hat. *Ich* brauche die sowieso nicht. Ich will nämlich am Leben bleiben. Und dabei verlasse ich mich nicht auf einen Fremden. Bei den Moppedfahrern, die das lässig sehen, "mendelt sich das 'raus" ;-)

Falk

--
GG Art. 5 - Eine Zensur findet nicht statt
https://secure.wikileaks.org/wiki/Deutsche_Wikileaks_Domain_ohne_Vorwarnung_gesperrt
http://blog.fefe.de/?ts=b727b1b0
Reply to
Falk Willberg

In article , Falk Willberg writes: |> |> In meinem "hier" habe ich mehr als einmal erlebt, daß die HU eher |> bürokratischen als technischen Character hat.

Ja, gerade wenn man sich vernünftige Fußrasten montiert, kann das schonmal Diskussionen auslösen -- die man nicht immer mit "und was ist Dir jetzt geholfen, wenn ich jetzt wieder die Originalen dranmache und diese -- zugelassenen -- nachher wieder drantu?" auflösen kann.

Nuja, man kann sich da für die Inspektion schon auf einen guten Mechaniker verlassen, aber das erspart einem nicht, essentielle Dinge kontinuierlich selbst zu überprüfen. Gerade was essentielle Elemente von Antrieb und Bremse betrifft... Rainer (Yamaha XT600)

Reply to
Rainer Buchty

Wobei auch der TUEV nicht immer allzuviel nutzt. Zuerst sah ich einen Alfo Romeo, der sich auf einer Kreuzung in Solingen spanabhebend gedreht hatte, weil die linke Vorderradaufhaengung bei normaler Fahrt komplett weggebrochen war. Hatte frische Plakette. Dachte, dass passiert aber auch nur anderen. Bis bei meinem Chrysler Horizon (mit TUEV) jemandem die rechte Hinterradaufhaengung ins Fahrerhaus krachte. Einfach so, ka-kruscht. Beide Male haben die Fahrer das hinbekommen. Nicht auszudenken, was bei einem Anfaenger auf einer Bergstrasse passiert waere.

--
Gruesse, Joerg

http://www.analogconsultants.com/

"gmail" domain blocked because of excessive spam.
Use another domain or send PM.
Reply to
Joerg

Rainer Buchty schrieb:

Note to self: Seitenständer abbauen ;-)

Inspektion mache ich selbst, bei der Technik von 1950 geht das.

Genau, bloß keine überflüssigen Zylinder herumschleppen, dann hört man nicht mehr, wann die Maschine arbeitet oder drei Takte pausiert ;-)

Falk

--
An Enfield Diesel seems to do an even better job than a Harley at
converting fuel into noise without much unwanted speed!
Reply to
Falk Willberg

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.