FORTH Beispiel

In article , Falk Willberg writes: |> |> Note to self: Seitenständer abbauen ;-)

Mittenständer und "Kuhfänger" um den Motor hab ich ja auch noch :P

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

Naja, 93er-Technik ist da auch nicht wesentlich komplexer, außer daß ich eben eine Zündelektronik unterm Sattel habe. Nicht, daß die auch nur ansatzweise dafür sorgen würde, daß das Mopped weniger verbrauchen würde als mein 5 Jahre jüngeres Auto... Aber dafür kann sie kaputtgehen, das ist doch toll ;)

Aber anders als früher, als es mir als Student mal unglaublichen Spaß bereitet hatte, mich 2 Tage unter einen eigentlich schrottreifen Ford Fiasco zu legen, um den mithilfe freundlichst gespendeter Ersatzteile (z.B. die Lenkung...), einem Schweißgerät, Spachtelmasse und viel Arbeit wieder in ein fahrtüchtiges Gefährt zu überführen, hab ich da heute so gar nichts dagegen, jemanden das gegen faire Entlohnung machen zu lassen.

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

Ach, komm. Suzuki ist da noch ne Nummer fieser.

Ich sag nur "Dr. Big" :)

Rainer

Reply to
Rainer Buchty
Loading thread data ...

Rainer Buchty schrieb:

Mittelständer ist ja vorhanden, hat aber 1cm Abstand vom Boden. Und das Brett, auf das ich sie in der Garage aufbocke, will ich nicht mit zur GTÜ nehmen...

Meine Einspritztechnik[0][1] ist wahrscheinlich noch komplizierter, aber man kann alles anfassen.

Habe ich bei der Dose auch nicht. Aber so ein Einzylinder-Diesel ist genauso interessant, wie das neueste Magnetometer mit I2C, eben weil der seine Drehzahl ohne jede Elektronik recht ordentlich auf 50Hz regelt. Um das hinzubekommen wird die Menge an Kraftstoff, der mit 200bar eingespritzt wird, aufs genaueste geregelt. Leider habe ich im WEB keine Beschreibung davon gefunden.

Kenne ich nicht. Seit Vmax[2] habe ich mich mit Grausen vom aktuellen Moppedmarkt abgemeldet.

Falk [0]

formatting link
[2]Ich habe mal eine gesehen, bei der eine Ansaughutze abgefallen war. Nix Verbrennungsluft! Darunter saß ein Kühlkörper!

--
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

Warum sollte er? Und wenn ich verhindern will, dass der Kunde mehr oder weniger versehentlich in Wörterbücher (vocabulary's) kommt, die er nicht benutzen soll/darf, kann ich die einfach sperren oder sogar headerless compilieren, dann findet der es nicht, es sei denn, er liest die Quellen, falls er die mitgekauft hat. Ansonsten hat er ein kompiliertes Programm und nur ein Wortverzeichnis freigegeben, in dem seine Worte für seine Applikation stehen.

Und lösche Speicher etc. kann man auch noch beliebig verrammeln. Und mir kannste glauben, wenn ich in Forth was verammle, dann hast Du nahe 0 Chance, dass Du da reinkommst, wenn Du die Quellen nicht mitgekauft hast. Ich mach da so einen Wirbel auf beiden Stacks, da kannste jahrelang mit einem Logikanalysator versuchen rauszukriegen, was da abläuft.

Abgesehen davon, gibt es bei vielen Controllern ja auch noch die Möglichkeit, das Flash mit einem Schreibschutz oder gar einem Ausleseschutz zu verammeln. Dann geht eh nix mehr.

Doch, denn ein Forth, was für Rauchmelder geschrieben wurde, wird kaum für einen Kunden passen, den Wasserstände interessieren.

Jeder Kunde kriegt sein spezielles Forth mit der auf ihn zugeschnitteten Anwendung. Das ist ja der unschlagbare Trick von Forth.

Und bei dem Lack&Leder-Domina Programm gibt es sicher kein Wort für Blümchen-Sex und kuscheln :-]

Wenn Du also was undefiniertes aufrufts/eintipperst, kriegste die Fehlermeldung 'kuscheln' is undefined :-o

Wenns definiert ist, isset ja erlaubt. So einfach kann das Leben sein :-)

Du hast noch nie die Vorteile eines (inkrementalen) Compilers im Target erlebt. Sonst würdest Du anders reden. BTW der Compiler hat nur wenige zusätzlichen Overhead. Würde mal tippen, dass das höchstens 200-300 byte sind. Habs nie gezählt oder ausgekuckt, weils mich nie interessiert hat. Forth ist extrem kompakt. Threaded code rulez.

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
[0 >R EXIT]

Wenn du es soweit eindampfst, dass er nur noch von dir freigegebene Worte benutzen und die ganzen Kontrollstrukturen alle nicht mehr funktionieren, dann reicht auch eine "in argv[]-Array aufspalten und Fallunterscheidung"-Shell.

Wenn man an beliebige Codeadressen springen kann, springt man an der Verrammelung einfach vorbei.

Eben, zum Beispiel auch kein Firmware-Upgrade.

Also ich halte ein Gerät, was 32 Eingabeports hat, an die man wahlweise Rauchmelder, Wasserstandsmelder, Gasdetektoren, Thermometer und andere Sensoren anschließen kann, schon für ziemlich nützlich.

Doch, ich kenne Lisp/Scheme. Einen handcodierten Lisp-Interpreter (wozu Compiler?) mit ähnlich nichtexistierender Typprüfung wie in deinem FORTH-Beispiel bekommt man sicher auf ähnliche Größe. Sowas wie PicoLisp in Assembler.

Und wenn schon Compiler, dann auf das Target einen Bytecode-Interpreter und den Compiler auf dem PC. Da kann man gleich viel mehr machen.

Stefan

Reply to
Stefan Reuther

In einen kleinen PIC mit 4k Flash und 256 Bytes RAM oder so, wird man wohl kein Lisp unterbringen können, ohne auf wichtige Merkmale wie Garbage Collection zu verzichten, aber wäre ansonsten mal einen Versuch wert.

Meinst du mit Pico Lisp das hier?

formatting link

Sieht interessant aus. Durch das grundlegende Konzept, daß wirklich alles ein CONS ist, wird ein GC und andere Dinge trivial, wahlfreier Zugriff auf große Arrays müssten aber ziemlich langsam sein.

PS: Lisp Fans können jetzt übrigens auch ihr 3D Maskottchen kaufen :-)

formatting link

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

Falk Willberg schrieb:

Zum Mengenstellwerk: Dieselben Probleme (zu große Fördermenge bei geringer Drehzahl) hatten auch alte LKW, da konnte man bei "geeigneter" Handhabung die Eierkohen aus dem Ausuff kugeln sehen. Geeignet war bei Leerlaufdrehzahl im zu hohen Gang einkuppeln und dabei das Gaspedal voll durchtreten, mit der Kupplung die Drehzahl auf

Reply to
Bernd Laengerich

Bernd Laengerich schrieb:

Reply to
Falk Willberg

Ich hab die letzten zwei Stunden mal was gehackt, in C, ergibt um die 3k i386-Code und kann in einer read/eval/print-Loop die Grundrechenarten. Fehlt noch der GC, lambda und setq. Mal schauen, wenn ich morgen Zeit finde, kommt das noch.

Ich schätze schon, dass man das in dem PIC unterbringen könnte, wenn man's zur Not in Assembler macht.

Macht ja nix. Ich hab bei mir die Symboltabelle auch nicht als Hash ausgeführt, sondern als lineare Liste; das Raussuchen eines Symbols ist dann eben O(n). Na und? Für eine Sprache, mit der ein Endkunde mein Gerät steuern und/oder erweitern können soll, ist das doch absolut ausreichend. Ich will ja kein Numbercrunching damit betreiben.

Stefan

Reply to
Stefan Reuther

Nein, den die komplette Anwenderoberfläche ist ja noch interaktiv erreichbar, wenn ich will...

Nein, wenn ich das Anwender-Dictionary mit den entsprechenden Routinen verrammle, dann hast Du keine Chance an irgendwelche Befehle ausserhalb ranzukommen.

Wenn ich allerdings das EXECUTE im Anwenderdictionary drinlasse, bin ich selber Schuld. Ansonsten kann ich ihm sogar die Adresse mitteilen, er kommt garnicht dazu, die anspringen zu können.

Ich brauche nur die Anwenderschicht in ein Vocabulary ANWENDER (oder was für ein Name mir gerade bequem ist) zu compilieren und anschliessend ANWENDER ONLY zu tippen und Ende isset mit der Spielerei.

Ich kann ja den Bootloader für Flash in einem hidden vocabulary drin lassen oder nach dem reset gucken, ob innerhalb x msec ein bestimmtes Kommando kommt (letzteres mach ich üblicherweise) um ein neues Firmware flash zu brennen. Null Problemo für mich, aber der Endanwender hat kaum eine Chance da rein zu kommen, wenn ich nicht will.

Wenn das Target nur einen Bytecode-Interpreter hat, kannste nur sehr begrenzt was neues definieren. Sehr unkomfortabel und wird bei Forth IIRC nur bei geschlossenen Applicationen gemacht. Z.B. Open-Boot.

Noch einfacher und besser (und nur minimal größer) ist ein sog. Nabelschnur-Forth, der Compiler bleibt samt Inner-Interpreter im Target und das Dictionary samt Outer-Interpreter und allem Schnätterateng sitzt im PC.

Das Forth System ist dabei grob in zwei Schichten zerteilt. Geht sehr komfortabel... Und das Target rennt fröhlich vor sich hin, wenn es beim boot keinen Verbindung zum PC hat/findet. Sehr effektiv.

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

Hallo!

"Wolfgang Allinger" wrote

Der Anwenderteil am Schluss ist klar. Nur die 80% drum herum nicht. Und wenn ich schon Stack höre usw... Und meine LAG repariert Kühe, die versteht sowas nicht, egal welche Programmiersprache. Soll sie auch nicht. Jeder hat halt so sein Feld, mit Computern und Technik rufen sie mich an, bei kranken Tieren nervt die Verwandtschaft meine LLAG.

Leider überhaupt nicht. Hat vielleicht aber auch mit meiner Herangehens- weise an die Informatik zu tun. Ein Informatiker der ein Projekt plant mit Millionen Zeilen Code und ein Techniker der Hardware programmiert unterscheiden sich fundamental. Ich muss mich in den Chip reindenken und programmiere nicht auf Layer 5 oder höher. Auf einem µC ist C eine sehr bequeme Erweiterung zum Assembler. Und verstehen tut man es auch nur zur Gänze wenn man sich das Datenblatt angeschaut hat. Ich würde nie den Anspruch auf Natürlichsprachigkeit erheben. Erscheint mir grotesk.

alsdenn, Jens

Reply to
Jens Frohberg

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.