Skip to content

Instantly share code, notes, and snippets.

@cstrotm
Created August 11, 2020 11:04
Show Gist options
  • Save cstrotm/cc6960592c49bce12811125e117ff06f to your computer and use it in GitHub Desktop.
Save cstrotm/cc6960592c49bce12811125e117ff06f to your computer and use it in GitHub Desktop.

Hausaufgabe 17. August 2020

Die Hausaufgabe besteht diesmal aus zwei unabhängigen Teilen. Such Dir heraus, was Dich interessiert und Dir Spass macht.

Eine mögliche Lösung zu der Hausaufgabe vom 10. August findest Du unter https://gist.github.com/cstrotm/00c96d36391668fa169a076b227bc23a

Zwischenergebnisse und auch diesen Text findest Du auf meiner Github-Gist Seite unter https://gist.github.com/cstrotm

Aufgabe 1) mit Mecrisp Quintus

Erstelle eine Applikation, welche Daten (z.B. von der seriellen Schnittstelle) liest und auf die SD-Karte schreibt. Benutze dabei den Treiber für die SD-Karte mit dem Namen mysdcard.fs in der Nextcloud unter Forth-lernen/mysdcard.fs: https://cloud.forth-ev.de/s/PQrT8PQ9wxjokXi

(@Martin: ist dies die korrekte Datei mit dem Treiber für die SD-Karte?)

Optional: Implementiere auf Basis des Treibers das ‘Block words’ und ‘Block extension words’ Wortset (ich werde das machen und, wenn es klappt, vor dem Wochenende auf meiner Github-Gist Seite veröffentlichen) https://forth-standard.org/standard/block

Die Block-Wörter der Forth-Standards implementieren ein Virtual-Memory Model, welches das Arbeiten mit einem Datenträger ohne den Overhead eines Dateisystems vereinfacht (sobald die Dateisystem-Implementierung für die SD-Karte im Logan-Nano stabil ist werden wir auch die Dateisystemzugriffe benutzen). Schreibzugriffe sind beim Block-IO “implizit”, immer dann wenn ein neuer Block in den Speicher geladen werden soll, dann wird ein ggf. geänderter Block vorher gesichert. Über das Wort flush kann aber das Schreiben eines geänderten Blocks erzwungen werden.

Ein weiteres Wort sollte die Daten von der SD-Karte in einer sinnvollen Art auf dem Bildschirm ausgeben.

Weiterführende Idee: Implementiere ein einfaches Dateisystem auf Basis des Block-IO. Beispiel: https://github.com/forth-ev/VolksForth/blob/master/sources/cpm/simpfile.fth

Aufgabe 2) mit GForth

Recheriere über die Implementation von verketteten Listen unter Forth. Anbei eine (unvollständige) Liste von Texten und Implementationen

Schreibe eine einfache Implementation einer verketteten Liste.

Optional: benutze dynamische Speicherverwaltung (allocate, free): https://forth-standard.org/standard/memory/ALLOCATE

Weiterführende Idee: Implementiere eine eigene Version von allocate, free und resize, welche mittels Block-IO auf einem Datenträger arbeitet (und nicht im Hauptspeicher)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment