000
16.06.2005, 17:45 Uhr
Xanthi24
|
Hallo alle zusammen!!danke erstmal für den 1.tip den ich von euch bekommen habe war echt spitze!!!
bräuchte hilfe bei dieser aufgabe !!weiß gar nicht was ich da machen soll danke !!·
Ringpuffer mit Zeigern
Ein Ringpuffer ist ein nach dem FIFO-Prinzip (first-in-first-out) organisierter Speicher zur Pufferung von Daten, die z. B. von einem Meßdatenerfassungsprogramm "angeliefert" werden, und zeitversetzt von einem Auswertungsprogramm weiterverarbeitet werden. Auch in der Betriebssystemsoftware für Netzwerkinterfaces und für die Datenfernübertragung finden Ringpuffer Verwendung. Der Puffer muß groß genug sein, damit er auch bei maximalem Zeitversatz nicht "überläuft". Durch Realisierung als lineare Liste ist dieser Fall immer gegeben, da man zu der Liste immer neue Elemente hinzufügen kann (jedenfalls, solange noch Arbeitsspeicher vorhanden ist). Es muß dafür gesorgt werden, daß aus einem leeren Puffer nicht mehr gelesen wird -> Meldung "Puffer leer". Die Abbildung des Rings in einem linear adressierten Speicher geschieht dadurch, dass ein am Pufferende angekommener Zeiger wieder an den Anfang gesetzt wird. Das Letze Element der Lister verweist also wieder auf das erste. Der Ringpuffer soll für die Verwaltung einer ständig wechselnden Anzahl von Nachrichten verwendet werden, wie es z. B. bei E-Mails der Fall ist. Die Nachrichten treffen als Texte unterschiedlicher Länge ein. Um sie effektiv zu verwalten und zu speichern, liegt die Verwendung von verketteten Listen nahe. Um aus diesen Listen einen Ringpuffer zu machen, muß folgendermaßen vorgegangen werden: o Eine neue Nachricht hängt sich an die vorherige "dran" - die Kette wird länger. o Die Kette soll immer zu einem Ring geschlossen sein, damit z. B. nach dem Lesen der neuesten Nachricht als nächstes eine Wiederholung alter Nachrichten bei der ältesten beginnen kann. o Zu einer effektiven Speicherverwaltung gehört auch das Beschaffen von Speicherplatz erst dann wenn er benötigt wird (malloc()) und Freigeben beim Löschen von Einträgen (free()). Es wird bei der ältesten Nachricht begonnen. Im Verlauf des Programms wird die jeweils aktuelle Nachricht angezeigt. Zur Interaktion mit dem Benutzer bietet das Hauptprogramm folgendes Menü an: o "D": Nachricht löschen (Delete) o " ": (Leertaste) Nächste Nachricht o "Q": Programm verlassen (Quit) o "X": alle Nachrichten löschen Nur zum Zweck der Simulation des Nachrichtenempfangs wird noch ein weiterer Menüpunkt benötigt: · "E": Nachricht eingeben. Nun kann eine Textzeile eingegeben werden. Das neue Listenelement wird an der aktuellen Listenposition eingefügt. Der Pufferzustand soll ständig erkennbar sein, d. h. in einer sog. Statuszeile wird die Zahl alter/neuer (= gelesener/ungelesener) Nachrichten angezeigt
a. Beginnen Sie bei der Datenstruktur, die aus einer Textzeile von max. 80 Zeichen und einem Pointer auf das nächste Element besteht. Skizzieren Sie den Puffer in verschiedenen Betriebszuständen und tragen Sie die jeweiligen Hilfs-Zeiger sowie die typischen Verkettungen ein: o ganz am Anfang und nach der ersten Nachricht o nach einigen Schreibvorgängen o nach einigen Leseoperationen o vor/nach Löschvorgängen b. Überlegen Sie, o welche Variablen benötigt werden, o welche elementaren Funktionen gebraucht werden, o welche der Variablen ggf. global (außerhalb aller Funktionen) vereinbart werden müssen, damit sie auf einfache Weise von den verschiedenen Funktionen benutzt werden können (möglichst wenige!), o auf welche Weise Funktionsresultate an die aufrufende Funktion übergeben werden sollen, o welche Funktion welche Überprüfungen durchführen soll c. Zeichnen Sie die Struktogramme der benötigten Funktionen zum Initialisieren, Schreiben, Lesen und Löschen der Puffereinträge. d. Erst jetzt wird der C-Quellcode geschrieben und alles getestet. |