Lab 04: Canonical Treiber Implementierung
In dieser Aufgabe implementieren Sie den Treiber für das Interfaces eines Canonical Devices, wie es in der Vorlesung vorgestellt wurde.
Last updated
In dieser Aufgabe implementieren Sie den Treiber für das Interfaces eines Canonical Devices, wie es in der Vorlesung vorgestellt wurde.
Last updated
Ihr Gerät verfügt über die drei Register Status, Command und Data.
Implementieren Sie den Zugriff auf Ihr Gerät mittels einem Thread, d.h. das virtuelle Gerät wird als Thread gestartet. Nutzen Sie zur Synchronisation Mechanismen aus der vorlesung (z.B. the Thread-API oder eine Semaphore oder Conditional zur Signalisierung). Das Steuern des virtuellen Gerätes soll nur über das Interface erfolgen.
Realisieren Sie das folgende Interface auf basis folgender Header-Datei (interface.h
):
Das Interface wird während der automatisierten Tests duch eine andere Implementierung ersetzt. Sie können also nicht direkt auf die Daten zugreifen.
Das Feld status
kann folgende Werte besitzen:
busy: 01
ready: 00
error: 02
Das Feld command
kann folgende Werte besitzen:
idle: 00
read: 01
write: 02
reset: 04
delete: 08
Die Felder status
als auch command
sind jeweils ein Byte groß.
Das Feld sharedData
hat eine Länge von 20 Byte.
Das Feld internalData
hat eine länge von 1.024 Byte.
Wird von Extern das Command-Register auf write gesetzt, liest der Treiber die Daten aus dem Data-Register und schreibt diese in den internen Speicher
Der interne Speicher in Ihrem Gerät soll 1.024 Byte betragen.
Die Daten werden in Ihrem Gerät fortlaufend in den internen Speicher geschrieben. Ist der Speicher voll wird der Status auf error gesetzt. (Bisher geschriebene Daten bleiben erhalten.)
Wird von Extern das Command-Register auf read gesetzt, liefert der Treiber die Daten. Die Daten werden dabei fortlaufend geschrieben.
Wird zwischen Lese- und Schreibvorgang gewechselt, startet der Lese- bzw. Schreibvorgang immer am Anfang des internen speichers (also bei Adresse 0).
Wird das Command-Register auf reset gesetzt, startet sowohl Lese- als auch Schreibvorgang wieder bei der Adresse 0.
Wird von Extern das Command-Register auf delete gesetzt, löscht das Gerät sämtliche gespeicherte Daten.
Implementieren Sie auf Basis folgender Header-Datei (device.h
):
Zum Entwickeln/Testen können Sie folgende main implementieren.
Schreiben Sie in den Internen Speicher des Gerätes 512 Byte Daten, danach soll der gesamte Speicherinhalt aus dem Gerät ausgelesen und ausgegeben werden.
Löschen Sie nun den Inhalt des Gerätes und schreiben Sie nun 2048 Byte in Ihr Gerät, danach soll der Inhalt des Gerätes ausgelesen und ausgegeben werden.
Setzen Sie nun das Gerät zurück und schreiben 256 Byte in Ihre Gerät. Danach wird der gesamte Speicherinhalt aus dem Gerät ausgelesen und ausgegeben werden.
Nutzen Sie hierfür gcc.
Sie können gcc unter Linux und/oder macOS direkt verwenden. Unter Linux installieren Sie gcc über Ihren Paket-Manager, unter macOX über Homebrew.
Nutzen Sie Windows 10 können Sie entweder eine Linux in einer virtuellen Maschine (z.B. in VirtualBox) nutzen, oder direkt das Windows Subsystem for Linux (WSL 2.0) nutzen. Alternativ ist es möglich Windows Subsystem for Linux über den Windows App Store zu installieren.
In der Wahl der Linux Distribution sind sie frei, alle Beispiele in der Vorlesung werden jedoch unter Ubuntu (letzter stabiler Release) bewertet und eventuell vorgestellt.
Die Bewertung Ihrer Abgabe findet automatisch statt. Stellen Sie hierzu folgende Punkte sicher:
Ihre Lösung befindet sich im Ordner aufgabe4.
Ihre Implementierung befindet sich in folgenden Dateien:
für device.h
in device.c
für interface.h
in interface.c
Zur Abgabe erhalten Sie einen Zugang zum hochschulinternen GitLab.
Ihre Lösung checken Sie in Ihrem Repository ein.
Die eigentliche Abgabe erfolgt über das hochschuleigene Commit-System. Der Zugriff ist ausschließlich im Hochschulnetz oder über VPN möglich.
Abgaben, die nicht vollständig sind oder die Abgabekriterien nicht erfüllen werden nicht bewertet.
Abgaben, die nicht fristgerecht eingereicht werden, werden nicht bewertet.
Nutzen Sie zur Abgabe ausschließlich das beschriebene Verfahren. Abgaben, die per E-Mail oder anderen Wegen eingereicht werden, werden nicht bewertet.
Abgaben, die aufgrund eines Fehlers nicht durch Tests laufen oder sich nicht kompilieren lassen, werden entsprechend mit weniger Punkten bewertet.