Hallo, für ein neues Projekt versuche ich gerade das Pollin NET-IO Board derart zu "vergewaltigen", dass auf dem ATmega das amForth läuft. Allerdings soll das FORTH nicht über die RS232 Leitung anzusprechen sein, sondern über Telnet und über das Ethernet. Das amForth bereitet mir da keine Sorgen, wohl aber das Netzwerk-Interface, da ich nirgends eine Implementierung in Assembler, sondern nur in C gefunden habe. Und jene, die ich gefunden habe, sind für diesen Zweck eigentlich schon viel zu aufwändig. Ich scheue auch keineswegs davor zurück, diese Implementierung selbst in die Hand zu nehmen, nur finde ich vergleichsweise wenig im Netz, was mir dabei hilft einen wirklich rudimentären TCP/IP "Stack" zu schreiben. Da ich hier nichts in den Foren gefunden habe, will ich doch erst einmal fragen, ob so etwas schon fertig existiert. Eine andere denkbare Möglichkeit wäre natürlich auch, einen kleinen TCP/IP Stack in FORTH zu schreiben, denn auf Geschwindigkeit auf dem Netz kommt es bei der zeichenweisen Ein- und Ausgabe nicht an. Es brauchen hier auch keine x parallelen Verbindungen gleichzeitig möglich zu sein, eine einzige reicht völlig aus. Was mir in der Tat vorschwebt ist ein minimaler Telnet-Server, der seine Ein- und Ausgaben dem amForth zur Verfügung stellt, sodass der ATmega über das Netz in FORTH programmierbar ist. Ich denke, mit dieser Basisprogrammierung ließen sich beliebig viele weitere Projekte realisieren, sodass der Aufwand schon die Mühe wert ist. Meine Fragen also: a) Gibt es so etwas schon? b) Wenn nein, wo finde ich detaillierte Informationen, wie ein wirklich primitiver TCP-Telnet Server gerade eben aussehen muss, wobei mir der uIP eigentlich schon zu gross ist. Viele Grüße Ralf
Eine (frei zugängliche oder gar GPL) Implementation von TCP/IP in irgendeinem Forth ist mir nicht bekannt. Entweder wird das Thema ignoriert oder von einem zugrundeliegenden OS bearbeitet. Derzeit bin ich ebenfalls dabei, mich mit dem TCP/IP und genau diesem Board zu beschäftigen. Mit genau der gleichen Zielsetzung, wir könnten also zusammen "leiden" Matthias
Hallo Matthias, die letzten paar Monate war ich ziemlich mit dem Hausausbau beschäftigt und obendrein habe ich auch noch mein Passwort hier vergessen. Jetzt also mit neuem Benutzernamen frisch ans Werk. Ich habe mich leidlich intensiv mit dem Byteverkehr auf dem Ethernet-Netzwerk beschäftigt und bin zum Schluss gekommen, dass ein reiner Telnet-Server auf dem ATmega auch in FORTH möglich sein muss. Alles, was zu implementieren ist, ist die Beantwortung eines ARP-Requests, sowie eine reine TCP/IP Datenleitung. Ein Ping (ICMP-Paket) wäre nett, muss aber nicht. Auf Geschwindigkeit kommt es mir hier nicht an, da ich den ATmega über diese Schnittstelle einfach nur remote programmieren können möchte, und keinen WebServer aufbauen will. Auch brauche ich hier kein Gewese um mehrere Verbindungen zu machen, da ich genau nur eine einzige Verbindung zulasse. Damit sind meine Anforderungen schon einmal gut eingedampft. Worüber ich auch schon nachgedacht habe, ist, anstatt dem ATmega einen RS-232 Anschluss zu geben, ihm einen 12 MHz Takt zu geben, sowie ein paar Widerstände und einen USB-Anschluss (das geht ja auch ohne den FT232R). Dies hätte zum einen den Vorteil, dass heutige PCs kaum noch über eine RS232-Schnittstelle verfügen und zum anderen die ATmega-RSR232 während der Programmierung frei für andere Anwendungen bleibt. Vielleicht könnte man bei kleinen Systemen während der Programmierphase auch gleich die Spannungsversorgung per USB realisieren. Was mich ebenfalls beschäftigt, ist der Anschluss einer SD-Karte. Auch hier kommt es mir auf Geschwindigkeit überhaupt nicht an, sodass man das 08/15 Universalprotokoll der Karten nehmen kann. Damit sollten alle SD-Karten Modelle klar kommen, egal, wie groß sie sind. Das amFORTH würde ich dann um die Block-IO Befehle (BLOCK, BUFFER, UPDATE, LOAD, etc.) aufbohren, sodass man nicht nur größere Turnkey-Applikationen auf und von der SD-Karte transferieren kann, sondern beispielsweise auch Daten (Funktion eines Datenloggers). Eventuell könnte man bei ausreichend Speicher dann auch eine SCREEN-Verwaltung inkl. Editor übernehmen. Ein Dateisystem muss ja auf der SD-Karte nicht vorhanden sein. Problematisch sind wohl eher die zwei FORTH-Standardbuffer zu je 1kB RAM. Ich denke, meine ersten Basteleien werden sich wohl auf das Ansprechen des Ethernet-Anschlusses von amFORTH aus sein, sowie das Erzeugen einer ARP- und einer Ping-Antwort. Soweit erst einmal meine Gedanken zu dem Thema. Viele Grüße Ralf
Eine rudimentäre IP Implementierung ist nicht all zu schwer und aufwändig. Nimm doch die, die du in C gefunden hast und streiche alles raus, was du nicht brauchst. Dann übersetzen und du hast Assembler Code :) Ich frage mich allerdings, ob du das alles in die 32KB Flash des Mega32 bekommst? Ich weiß ja nicht, wie groß amFORTH ist, aber du wirst schon einige Funktionen implementieren müssen - allein der ENC-Treiber belegt Einiges. Gruß, Jan
Hallo Jan, vielen Dank für deinen Beitrag. Uns ist bekannt, dass es eine Implementierung in C gibt, sie ist auch Basis unserer Überlegungen. Aber leider wäre sie für diesen Zweck genauso nutzbringend, stünde sie in FORTRAN oder LISP: Wenn sie nicht in Assembler (als Source) oder in FORTH erhältlich ist, muss man sie dennoch um- oder neu schreiben. Davon ab: Ich glaube nicht, dass das Programmieren des ENC tatsächlich soviel Platz beansprucht. Das Ding ist doch ausreichend intelligent. Ich schätze grob, dass alles in etwa 3kB zu machen ist: 200 Byte Initialisierung 100 Byte ARP-Antwort 100 Byte Ping-Antwort 1,5 bis 2kB TCP/IP Telnet-Server für einen Caller. Das Problem ist hier nur, dass bisherige Basteleien mit ENC und TCP/IP immer vom C-Quellcode ausgingen, der je nach Anwendungsfall erweitert worden ist. Hier aber gehen wir von einer Assembler-Source aus, dem der Telnet-Server hinzuzufügen ist. XXX-Compiler (XXX=beliebige Sprache) würden beliebige Register verwenden, RAM-Zellen belegen, den Stack manipulieren, etc. und das amFORTH durcheinander bringen. Also bleibt nur entweder das amFORTH um ENC-Treiber und TCP/IP "Stack" zu erweitern, oder aber das ganze in FORTH zu schreiben. Viele Grüße Ralf
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.