-
Die
vorliegende Erfindung bezieht sich auf Ringpuffer und Verfahren
zum Betreiben derselben, speziell für Anwendungen in Telekommunikationssystemen
und -verfahren und in Computern, spezieller ausgedrückt in denen,
in welchen Mehrfachraten-Daten empfangen und zeitweise gespeichert
werden müssen.
Beispielsweise können
derartige Anwendungen digitales Signalverarbeiten (DSP), Kanalentzerrung,
Kanalcodierung, Verschachtelung, Kompression, Verschlüsselung,
Sprachcodieren und -decodieren etc. beinhalten.
-
HINTERGRUND DER ERFINDUNG
-
Es
gibt viele Anwendungen in der Telekommunikation, bei welchen Daten
bei unterschiedlichen Datenraten empfangen werden, z.B. wenn Sprachnachrichten,
Video, Daten, Fax unkomprimiert oder komprimiert übertragen
werden. Die "Multimedia-Revolution" erfordert die Übertragung
und den Empfang einer breiten Vielfalt von Datentypen, Formaten
und Raten. Derartige Daten werden häufig durch Algorithmen verarbeitet,
welche das zeitweise Speichern oder Puffer der Daten erfordern,
während
diese Verarbeitung ausgeführt wird.
Sobald sie verarbeitet sind, wird die gesamte Aufzeichnung der Daten
vom Speicher gelöscht
oder mit den nächsten
Daten, welche zu verarbeiten sind, überschrieben.
-
Eine
Art des Pufferns derartiger Daten geschieht in einem Ringpuffer.
Hardware-Lösungen
für derartige
Puffer haben einen hohen Grad an Hochwertigkeit erreicht. Diese
Lösungen
basierend häufig
auf einer MODULO-Arithmetik für
das Berechnen der Adressen im Speicher, da eine derartige Arithmetik
sehr effizient in einem digitalen System ausgeführt werden kann. Wenn man sich
jedoch mit Daten beschäftigt,
welche bei unterschiedlichen Datenraten ankommen können, gibt
es ein Problem, wie man die Größe der Speicher
optimieren kann, welche für
das Puffer der Daten benutzt werden. Die dritte Generation der mobilen
Telekommunikationssysteme, wie z.B. UMTS, erfordert Vielfachrate-Datenverarbeitung,
wobei die Datenrate sich möglicherweise
mit jedem Rahmen verändert.
Die Transportkanäle
sind die Übertragungsdienste,
welche durch die Ebene 1 zu MAC und höheren Ebenen angeboten werden.
Die Schwierigkeit beim Implementieren einer physikalischen UMTS-Ebene
besteht darin, dass Transportkanäle
hochvariable Raten besitzen, welche sich bei jedem Rahmen ändern können (10
ms). Dies erfordert ein sehr anpassungsfähiges Speicher-Management. Das
Grundband-Modem muss Datenpakete mit veränderlicher Größe entsprechend
Transportkanälen
mit veränderlicher
Rate speichern. Nichtsdestotrotz ist das Modem aufgrund der Funkbandbreite
begrenzt. Beispielsweise muss es eine endliche Anzahl N von 384
kbps-Transportkanälen oder
alternativ 3 × N
128 kbps-Kanäle oder
32 × N
12 kbps-Kanäle
bearbeiten. Der Speicher muss optimiert werden, um all diese Fälle effektiv
zu bearbeiten.
-
Eine
Lösung
dieses Problems wird in der
US
6,005,898 vorgeschlagen. Die Rate wird konstant gehalten,
sofern die Verarbeitungsschaltung betroffen ist, indem die Signale
für niedrige
Datenraten dupliziert werden, so dass die Verarbeitungsschaltung
die gleiche Datenrate unabhängig
von der empfangenen Datenrate empfängt. Diese bekannte Technik
nutzt den Zeitunterschied, um Extrabits bei niedrigen Datenraten
zu liefern, welche helfen können,
die Signalqualität
zu verbessern. Jedoch besitzt diese Technik den Nachteil, dass die volle
Datenrate unabhängig
von der empfangenen Datenrate benutzt wird. Der Leistungsverbrauch
mobiler Telefone ist wichtig für
die Batterielebensdauer. Der Leistungsverbrauch von datenintensiven
Verarbeitungsaufgaben ist in breitem Maße abhängig von den Speicherzugriffen.
Da das Benutzen der maximalen Datenrate zu jeder Zeit das Benutzen
einer Maximalanzahl von Datenzugriffen bedeutet, um irgendwelche
der Daten zu verarbeiten, ist diese Lösung nicht bezüglich des
Leistungsverbrauches, der Speichernutzung oder der Kosten (Speicher
mit zu großer
Größe) optimiert.
-
Ein
anderes Verfahren besteht darin, eine Vielzahl von Speichern zu
liefern und einen Speichertyp für jede
Datenrate zu nutzen. Diese Technik gebraucht den Speicher ineffizient,
da ein Teil des Speichers für
lange Zeitperioden untätig
sein kann, bis eine spezielle Datenrate benutzt wird. Falls der
benutzte Speicher ein RAM ist, welcher eine kontinuierliche Auffrischung
benötigt,
dann ist der Leistungsverbrauch nicht optimal. In der
US 5,659,698 wird eine Lösung für dieses
Problem vorgeschlagen. Sie liefert einen Ringpuffer, welcher durch
zwei unterschiedliche Datengrößen adressiert
werden kann. Eine erste Größe ist durch
einen Offset und eine zweite Größe durch
eine Gleitadresse bestimmt. Diese Technik besitzt einen Nachteil,
wenn die Datenrate sehr stark variiert. In diesem Fall können die
Daten zum Beginn des Ringpuffers umherkreisen gelassen werden und
Daten überschreiben,
welche noch benötigt
werden. In der '698
wird speziell dargestellt, dass die durch die Gleitadresse behandelten Daten
wenig oder keine Chance zum Erreichen des Endes des Puffers besitzen
sollten. Um dies zu verhindern, kann ein großer Puffer benutzt werden,
dann jedoch ist das Gebrauchen des Speichers nicht optimal.
-
Es
besteht eine Notwendigkeit für
ein optimaleres Gestalten des Ringpuffers, welches einen besseren Nutzen
des Speicherraumes in sich vereinigt und den Leistungsverbrauch
optimiert, während
es auch in der Lage ist, sich effizient mit den Daten zu beschäftigen,
welche bei unterschiedlichen Datenraten ankommen.
-
Eine
Aufgabe der vorliegenden Erfindung besteht darin, einen Ringpuffer
und ein Verfahren zum Betreiben desselben zu liefern, welches eine
verbesserte Optimierung des Leistungsnutzens und der Speichergröße besitzt.
-
Eine
andere Aufgabe der vorliegenden Erfindung besteht darin, einen Ringpuffer
und ein Verfahren zum Betreiben desselben zu liefern, welches eine
verbesserte Leistungsfähigkeit
für das
zeitliche Speichern von Daten bei veränderlichen Datenraten besitzt.
-
ZUSAMMENFASSUNG DER VORLIEGENDEN
ERFINDUNG
-
Die
vorliegende Erfindung liefert ein Verfahren zum Speichern von Daten
in einem Ringpuffer, definiert durch Anspruch 1.
-
Vorzugsweise
weist das Verfahren ferner die Schritte auf: Speichern eines fünften Referenzwertes, welcher
für den
zyklischen Zustand des Ringpuffers repräsentativ ist. Vorzugsweise
ist der fünfte
Wert ein Boolescher Wert. Das Verfahren beinhaltet vorzugsweise
den Schritt des Verhinderns des Schreibens der Daten in den Ringpuffer,
abhängig
von dem Wert des fünften
Wertes. Typischerweise besitzt der Boolesche Wert des fünften Wertes
einen von zwei binären
Werten, und der fünfte
Wert ändert
sich von einem Binärwert
zu einem anderen, wenn der Wert entweder des dritten und vierten
Wertes sich so verändert,
dass er die Adresse des Endes des Ringpuffers durchlässt. Im
Falle eines Inkrementierens des Puffers kann der Schritt des Schreibens der
Daten in den Ringpuffer durch die folgende Wahrheitstabelle bestimmt
werden:
| zweiter
Wert > dritter Wert > vierter Wert | fünfter Wert
= ein Binärwert | Puffer
besitzt freie Speicherorte und diese können zugewiesen werden |
| dritter
Wert < vierter < zweiter Wert | fünfter Wert
= anderer Binärwert | Puffer
besitzt freie Speicherorte und diese können zugewiesen werden |
| vierter
Wert = dritter Wert | fünfter Wert
= ein Binärwert | Puffer
besitzt freie Speicherorte und diese können zugewiesen werden |
| vierter
Wert = dritter Wert | fünfter Wert
= anderer Binärwert | Puffer
ist voll und keine Speicherorte können zugewiesen werden |
-
Für einen
dekrementierenden Ringpuffer wird eine ähnliche Tabelle angewendet.
Typischerweise werden die Daten, welche in dem Ringpuffer zu speichern
sind, wenigstens bei einer ersten und einer zweiten Datenrate empfangen,
und ein Betrag an Speicherraum wird in dem Ringpuffer entsprechend
der Datenrate zugewiesen. Der Puffer kann in jedem geeigneten Speicher
implementiert werden, jedoch speziell auf einem Direktzugriffsspeicher
(RAM) auf dem Chip oder außerhalb
des Chips. Typischerweise wird der Ringpuffer in einem Mobiltelekommunikationssystem
benutzt.
-
Die
vorliegende Erfindung liefert einen Ringpuffer, welcher einen Adressgenerator
besitzt, definiert durch Anspruch 10.
-
Der
Ringpuffer kann auch einen fünften
Speicherort aufweisen, welcher einen fünften Referenzwert speichert,
welcher für
den zyklischen Zustand des Ringpuffers repräsentativ ist. Die Speichersteuerung
ist vorzugsweise geeignet, das Schreiben von Daten in den Ringpuffer
abhängig
von dem Wert des fünften
Wertes zu verhindern. Typischerweise besitzt der fünfte Wert
einen von zwei Binärwerten,
und die Speichersteuerung ist geeignet, den fünften Wert von einem Binärwert zu
einem anderen zu verändern,
wenn sich der Wert entweder des dritten oder des vierten Wertes
so ändert,
dass er die Adresse des Endes des Ringpuffers durchlässt. Falls
der Puffer ein inkrementierender Puffer ist, kann die Speichersteuerung
geeignet sein, das Schreiben von Daten in den Ringpuffer zuzulassen,
wie dies durch die folgende Wahrheitstabelle bestimmt ist:
| zweiter
Wert > dritter Wert > vierter Wert | fünfter Wert
= ein Binärwert | Puffer
besitzt freie Speicherorte und diese können zugewiesen werden |
| dritter
Wert < vierter < zweiter Wert | fünfter Wert
= anderer Binärwert | Puffer
besitzt freie Speicherorte und diese können zugewiesen werden |
| vierter
Wert = dritter Wert | fünfter Wert
= ein Binärwert | Puffer
besitzt freie Speicherorte und diese können zugewiesen werden |
| vierter
Wert = dritter Wert | fünfter Wert
= anderer Binärwert | Puffer
ist voll und keine Speicherorte können zugewiesen werden |
-
Typischerweise
werden die Daten, welche in dem Ringpuffer zu speichern sind, bei
wenigstens einer ersten und einer zweiten Datenrate empfangen und
die Speichersteuerung ist geeignet, einen Betrag an Speicherraum
in dem Ringpuffer entsprechend der Datenrate zuzuweisen.
-
Die
vorliegende Erfindung kann auch ein Mobil-Telekommunikationssystem
liefern, welches einen Ringpuffer, wie oben beschrieben, aufweist.
Der Ringpuffer kann in jedem Bauteil des Systems beinhaltet sein, wie
z.B. in einem oder mehreren mobilen oder stationären Benutzergeräten eines
Basisstation-Transceivers, einem Zwischenverstärker, einer Funkvermittlungsstelle.
-
Ein
Ringpuffer entsprechend der vorliegenden Erfindung gestattet das
effektive Implementieren von Nachrichten variabler Größe, um Daten
in Echtzeitumgebung zu übertragen
und zu empfangen.
-
Die
vorliegende Erfindung wird nun mit Bezug auf die folgenden Zeichnungen
beschrieben.
-
KURZE BESCHREIBUNG DER ZEICHNUNGEN
-
1 zeigt
einen Nachrichtenraum entsprechend einer Ausführungsform der vorliegenden
Erfindung zum Speichern von Daten in einem Ringpuffer.
-
2 zeigt
den Anfangszustand eines Ringpuffers entsprechend der Erfindung.
-
3 und 4 zeigen
den Ringpuffer der 2 zu späteren Zeiten.
-
5, 6A und 6B zeigen
schematische Flussdiagramme der Adressensteuerung entsprechend den
Ausführungsformen
der vorliegenden Erfindung.
-
7 zeigt
die Initialisierschritte für
einen Ringpuffer entsprechend der vorliegenden Erfindung.
-
8 zeigt
ein Beispiel der Anwendung der vorliegenden Erfindung für das Vielfachrate-Datenpuffern.
-
9 ist
eine schematische Darstellung einer Software-Lösung, welche einen eingebetteten
Mikroprozessor entsprechend einer Ausführungsform der vorliegenden
Erfindung nutzt.
-
BESCHREIBUNG DER ERLÄUTERNDEN
AUSFÜHRUNGSFORMEN
-
Die
vorliegende Erfindung wird mit Bezug auf bestimmte Ausführungsformen
und Zeichnungen beschrieben, jedoch ist die vorliegende Erfindung
nicht darauf begrenzt, sondern nur durch die Ansprüche. Speziell
kann die vorliegende Erfindung ebenso gut in Hardware oder Software
implementiert werden. Die vorliegende Erfindung wird hauptsächlich mit
Bezug auf Mobilfunktelekommunikationssysteme beschrieben, jedoch ist
die vorliegende Erfindung nicht auf diese beschränkt. Im Folgenden wird das
Inkrementieren eines Ringpuffers beschrieben, jedoch wird ein Fachmann
würdigen,
dass die vorliegende Erfindung nicht darauf begrenzt ist, sondern
ebenso das Dekrementieren von Ringpuffern beinhaltet. Mit Bezug
auf das Adressieren von Speicherorten in einem Puffer ist die vorliegende
Erfindung nicht auf irgendein spezielles Verfahren begrenzt, z.B. relatives
Adressieren, absolutes Adressieren.
-
Ein
Gesichtspunkt der vorliegenden Erfindung begründet sich auf das Implementieren
eines Ringpuffers, welcher die oben erwähnten Probleme löst, speziell
für Vielfachrate-Daten.
Die vorliegende Erfindung bezieht sich auf das Puffer von Daten
in einem Ringpuffer 20, welcher eine vorteilhafte Verwendung
in einem Mobiltelekommunikationssystem finden kann, z.B. in einem
Mobiltelefon oder in einer Basisstation. Die Zuordnung von Raum
in dem Puffer wird entsprechend Ausführungsformen der vorliegenden
Erfindung in Form des Speicherns von Nachrichten 10 (siehe 1)
in dem Ringpuffer beschrieben. Die Nachrichten 10 sind
Teil des Ringpuffers 20, welcher die Speicherfläche abgrenzt,
welche für
die Systemaufgaben zugeordnet werden kann. Eine Nachricht 10 trägt ein Datenteil 6,
welches die Information enthält,
welche in dem Echtzeitsystem, z.B. UMTS, übertragen wird. Innerhalb eines
Senders oder Empfängers
oder einem anderen Verarbeitungsgerät wird sie zwischen unterschiedlichen
Aufgaben ausgetauscht, welche die Verarbeitung der Information durchführen. Jede
Nachricht 10 hat einen header bzw. Nachrichtenkopf 1,
welcher ihren Status 2 und ihre Größe 4 besitzt. Das
Statusfeld kann mehrere Werte annehmen, z.B. FREI, BENUTZT oder
ENDE. Wenn eine Nachricht dem Speicher zugewiesen wird (Daten werden
eingelesen), geht dessen Status von FREI auf BENUTZT über. Wenn
er freigemacht wird, geht er von BENUTZT auf FREI über. Der
EMD-Wert wird benutzt, um anzuzeigen, dass es keine Nachricht unterhalb
dieser Position gibt und dass die nächsten Nachrichten am Beginn
des Puffers zuzuweisen sind. Optional kann ein Steuerwort 8 am
Ende einer zugewiesenen Nachricht 10 zugewiesen werden,
um zu prüfen,
dass eine Nachricht tatsächlich
mit der spezifizierten Größe gefüllt wurde und
dass der Pufferinhalt nicht verfälscht
ist. Entweder kann das Kontrollwort 8 oder die header-1-Information oder
beide von diesen genutzt werden, um die Datenintegrität zu prüfen. Ein Überfließen am Beginn
oder am Ende einer Nachricht wird eine Verfälschung der Daten auslösen, welche
durch das Überwachen
des Steuerwortes und/oder des Nachrichtenkopfes bestimmt werden
kann. Dies kann optional während
der gesamten Lebensdauer einer speziellen Nachricht durchgeführt werden.
Dieses Überwachen
des Nachrichtenkopfs und/oder Steuerwortes kann einen Gesichtspunkt
des Datenschutzes innerhalb des Puffers aufweisen, welches ein Gesichtspunkt
der vorliegenden Erfindung ist.
-
Der
Ringpuffer 20 wird durch das Warten von Zeigern gesteuert,
welche im Speicher gespeichert sind, z.B. in Registern oder ähnlichen
Speicheroten gespeichert, welche freie und benutzte Flächen in
dem Ringpuffer 20 abgrenzen (siehe 2). Die
Speichersteuerung kann durch ein getrenntes Steuergerät ausgeführt werden
oder kann in Software als Teil eines Computerprogramms implementiert
sein. Im Folgenden wird Bezug auf Zeiger und Register genommen,
jedoch ist die vorliegende Erfindung nicht darauf begrenzt, noch
wird erwartet, dass die vorliegende Erfindung durch die Art des
Speichergebrauchens begrenzt ist, z.B. EEPROM, SRAM, noch in welcher
Weise das Managen und Adressieren des Speichers implementiert ist.
In Systemen, welche keine Zeiger und/oder Register benutzen, sind äquivalente
Steuereinrichtungen im Allgemeinen vorgesehen, z.B. Handles, welche
in geeigneter Weise gespeichert werden können, z.B. auf einem Stapel
oder in einem getrennten Speicher.
-
Vorzugsweise
werden fünf
Register oder Speicherorte benutzt, um die Adress-Steuerdaten für den Ringpuffer
zu speichern.
-
Register
1 enthält
einen Zeiger des Wertes pBegin bzw. pBeginn, welcher auf den Beginn
der Adresse 11 des Ringpuffers 20 zeigt.
-
Register
2 enthält
einen Zeiger des Wertes pRead bzw. pLese, welcher auf den Beginn
eines Leseabschnitts 12 des Ringpuffers 20 zeigt.
-
Register
3 enthält
einen Zeiger des Wertes pWrite bzw. pSchreibe, welcher auf den Beginn
der Adresse 13 eines Schreibe-Abschnitts des Ringpuffers 20 zeigt.
-
Register
4 enthält
einen Zeiger des Wertes pEnd bzw. pEnde, welcher auf eine Adresse 14 am
Ende des Ringpuffers zeigt.
-
Register
5, FlagLoop bzw. Kennungsschleife, enthält einen Zeiger eines Booleschen
Wertes 15, z.B. WAHR oder FALSCH.
-
Der
Wert ändert
sich jedesmal, wenn pRead oder pWrite am Ende des Ringpuffers durchlauft,
und wird zum Beginn des Puffers in einer Umkreisungs-Prozedur zurückgeschickt.
-
Wie
in 2 gezeigt wird, enthält am Beginn der Puffer 20 nur
eine FREI-Nachricht, welche anzeigt, dass die gesamte Fläche bereit
ist, zugeordnet zu werden, wobei bei der Adresse pRead gestartet
wird, welche an diesem Zeitpunkt die gleiche Adresse wie pBegin
und pWrite besitzt.
-
Wie
schematisch in 3 gezeigt wird, ist während der
Lebensdauer der Puffer aus zwei Teilen aufgebaut. Ein Teil 16 enthält FREI-Nachrichten,
welche, wie in der Figur gezeigt wird, Bereiche von Adressen pWrite
bis pEnd und pBegin bis pRead besitzt, wenn FlagLoop = FALSCH ist.
Wenn eine neue Nachricht benötigt
wird (ein neuer Raum im Speicher erforderlich ist), wird eine Fläche durch
Speichern der Werte des Statusfeldes 2, des Größenfeldes 4 der
Nachricht und optional des Steuerwortfeldes 6 beginnend
bei der aktuellen pWrite-Adresse
zugewiesen. Auch weist ein Teil 17 BENUTZTE Nachrichten
auf (d.h. zugewiesene und gespeicherte Daten), welche von den Adressen
pRead zu pWrite reichen, wenn FlagLoop = FALSCH ist. Wenn eine Nachricht
freigegeben wird, wird der Status auf FREI gesetzt. Wenn die Nachricht,
welche mit der Adresse pRead beginnt, freigegeben ist, wird die
Adresse pRead zu der nächsten
BENUTZTEN Nachricht bewegt, und das relevante Register wird mit
dem neuen Adresswert aktualisiert. Der Wert von pRead zeigt weiterhin
auf die erste BENUTZTE Nachricht des Abschnitts. In diesem Beispiel
besitzt FlagLoop den Wert FALSCH, was bedeutet, dass die Adresse
pWrite noch nicht die Endadresse des Puffers (pEnd) erreicht hat.
-
Wenn
einige weitere Nachrichten zugewiesen wurden, ändert sich der Wert von pWrite,
wobei auf Adressen gezeigt wird, welche näher an dem Ende des Ringpuffers
sind, jedoch immer auf eine FREIE Nachrichtenfläche. Wenn die nächsten Nachrichten,
welche zuzuweisen sind, in pWrite resultieren, welches unterhalb
der Adresse pEnd des Puffers ankommt, setzen sie das Statusfeld
der letzten Nachricht auf ENDE und starten das Schreiben am Beginn
des Puffers 20 für
die nächste
Nachricht, wie dies in 4 gezeigt wird, so dass sie
umherkreisen, wie dies im Allgemeinen für einen Ringpuffer erforderlich
ist. FlagLoop ändert
sich auf WAHR bei jedem Umherkreisen von pWrite; und FlagLoop ändert sich
auf FALSCH für
jedes Umherkreisen von pRead.
-
Entsprechend
einem Gesichtspunkt der vorliegenden Erfindung wird diese Umherkreisungsprozedur vorzugsweise
in einer sicheren Weise gesteuert, um das Überschreiben von Daten, welche
noch nicht verbraucht wurden, d.h. welche noch erforderlich sind,
zu verhindern. Diese Datensicherheitseinrichtung kann durch die
Kombination von FlagLoop, der pWrite- und pRead-Register und eines
Steueralgorithmus vorgesehen sein, welcher die zyklische Speicherzuweisungsnutzung
eines Ringspeichers berücksichtigt.
Wenn pWrite größer als
pEnde werden würde,
wird pWrite zurück
zu pBegin gebracht und FlagLoop wird auf WAHR gesetzt. Daher besitzt
FlagLoop den Wert WAHR, wenn pRead näher am Ende des Ringpuffers
ist als pWrite. FlagLoop hat den Wert FALSCH, wenn pRead näher am Beginn
des Ringpuffers ist als pWrite. Zwei Steuerfälle treten auf. Falls FlagLoop
auf FALSCH gesetzt ist und pRead den Anschluss an pWrite findet,
dann ist der gesamte Puffer frei. Wenn FlagLoop den Wert WAHR und
pWrite den Anschluss an pRead findet, hat der Puffer keine Speicherorte
zum Zuordnen mehr frei. In diesem Fall wird die nächste Nachricht
in einem anderen Ringpuffer gespeichert, z.B. durch das Schaffen
eines Puffers entsprechend der Routine
200 (
7),
oder wird missachtet, wenn kein neuer oder vorhandener Puffer verfügbar ist.
In dem speziellen Fall, dass pRead auf die gleiche Adresse wie pBegin
zeigt und pWrite noch nicht das Ende des Puffers erreicht hat, wird
dann FlagLoop auf FALSCH gesetzt. Wenn eine neue Nachricht pWrite
unterhalb von pEnd übernehmen
würde,
muss pWrite auf die Adresse pBegin am Beginn des Puffers zeigen,
um mit dem Schreiben einer neuen Nachricht zu beginnen. Um dies
durchzuführen,
muss es umherkreisen, und FlagLoop wird auf WAHR geändert. Wenn
pWrite pRead entspricht und FlagLoop auf WAHR gesetzt ist, dann
ist der Speicher voll und keine weiteren Daten können in den Ringpuffer geschrieben
werden. Oben Stehendes kann als ein neuer Algorithmus zusammengefasst
werden, welcher durch die folgende Wahrheitstabelle festgelegt ist
(unter der Annahme, dass ein inkrementierender Puffer benutzt wird):
| pEnd > pWrite > pRead | FlagLoop
= FALSCH | Speicher
ist frei und kann zugeordnet werden |
| pWrite < pRead < pEnd | FlagLoop
= WAHR | Speicher
ist frei und kann zugeordnet werden |
| pWrite
= dritter pRead | FlagLoop
= FALSCH | Speicher
ist frei und kann zugeordnet werden |
| pWrite
= pRead | FlagLoop
= WAHR | Speicher
ist voll |
-
Die
vorliegende Erfindung beinhaltet jegliche Routine, welche gleich
zu einer Implementierung der obigen Wahrheitstabelle oder irgendeines
Gerätes
ist, welches diese Routine ausführt.
-
Es
wird vorzugsweise Sicherheit geliefert, um sicherzustellen, dass
pWrite nicht pRead überspringen kann.
Dies wird mit Bezug auf die Routinen 100, 150, 160 und 200 in
den 5, 6A, 6B, 7 beschrieben.
Die Routine 200 der 7 wird einmal
bei der Schaffung eines Ringpuffers aufgerufen. Die Routine 100 der 5 wird
bei jeder Nachrichtenzuweisung aufgerufen. Die Hauptroutine 150 der 6A wird
aufgerufen, wenn eine Nachrichtenzuordnung in einem Nicht-Umlauf
oder einem "Nicht-Umherkreisen" durchgeführt wird,
wohingegen der Sprungbefehl des Schrittes 106 aufgerufen
wird, wenn eine Nachrichtenzuweisung mit einem Umherkreisen erforderlich
ist. Die Routine 160 der 6B wird
aufgerufen, wenn eine Nachricht freigegeben ist.
-
Als
Erstes wird ein Ringpuffer entsprechend der Routine
200 initialisiert,
und der Algorithmus wird zu
5 durchgelassen.
Mit Bezug auf
5 wird der Anfangsschritt
102 pWrite
einem zeitlichen Wert pWrite
temp gleichgesetzt,
welcher später
benutzt werden wird, wenn eine zukünftige gültige pWrite-Adresse bestimmt wird.
Es wird dann bestimmt, ob der vierte Zustand der Tabelle 1 existiert.
Dies kann mit dem Starten eines ersten Schrittes
104 durchgeführt werden,
in welchem bestimmt wird, ob der aktuelle FlagLoop-Wert FALSCH ist.
Falls JA, dann kann die Prozedur mit dem Schritt
112 fortfahren.
Falls NEIN, dann ist FlagLoop = WAHR, und in dem nächsten Schritt
106 wird
bestimmt, ob die Zuordnung des Speicherraumes für die nächsten Daten pWrite unterhalb
von pRead annimmt. Es ist allgemein bekannt, einen Offset zu nutzen,
um eine neue Adresse zu berechnen – siehe z.B.
US 5,659,698 . Dieser Offset wird durch
den Betrag an Daten bestimmt, welche in einer Nachricht zusätzlich zu
irgendwelchen zusätzlichen
Feldern zu Puffern ist, z.B. headers bzw. Nachrichtenköpfe. Wenn
beispielsweise eine neue Nachricht bei einer Datenrate D1 zu speichern
ist, wird jede Puffernachricht eine Anzahl von Speicherzuordnungen
O
1 erfordern. Dieser Wert O
1 kann
in einem Register oder einem ähnlichen
Speicherort gespeichert werden oder könnte während des Umlaufes berechnet
werden. Im vorliegenden Fall ist der Wert von O
1 gleich
einem header und die Größe der Speicherzuordnung,
welche für
die Daten plus irgendwelcher zusätzlicher
oder optionaler Felder durchzuführen
ist, wie z.B. einem Steuerwort
8. Wenn bestimmt wird, ob
ausreichend Speicherraum verfügbar
ist, muss Speicherraum für
zwei Nachrichtenköpfe
zuge lassen sein: einer für
die gegenwärtige
neue Nachricht und einer für
die nächste
neue Nachricht nach der aktuellen neuen. Es muss einen Speicherraum
nicht nur für
die gegenwärtige
neue Nachricht geben, sondern auch zum Initialisieren der nächsten Nachricht.
Deshalb wird im Schritt
106 der aktuelle Wert für pWrite
temp durch den Offset O1 plus einem header
vermehrt (oder in einem Dekrementierpuffer dekrementiert), und dieser
neue Wert wird mit dem aktuellen pRead (FlagLoop = WAHR) verglichen.
Wenn pWrite
temp + Öl + header pRead übersteigt,
dann gibt es ungenügend
Raum in dem Puffer, und die Routine
100 geht hinaus, um
einen anderen Puffer zu finden, oder zur Routine
200, um
einen neuen zu schaffen, oder die Daten werden verworfen. Falls
pWrite
temp + O1 + header pRead nicht überschreitet,
wird pWrite auf pWrite
temp + O1 im Schritt
110 gesetzt,
und die Routine kehrt zum neuen Wert von pWrite zurück. Die
Daten können
dann in die Nachricht geschrieben werden.
-
Im
Schritt 112 wird der aktuelle Wert von pWritetemp um
den Offset O1 und einen header vergrößert und dieser Wert mit pEnd
(FlagLoop = FALSCH) verglichen. Falls pWritetemp +
O1 + header pEnd überschreitet,
wird eine Umherkreise-Prozedur erforderlich, und die Routine 100 geht
im Schritt 114 hinaus zur Routine 150 (Speicherzuordnung)
in 6A. Falls pWritetemp +
O1 + header kleiner als pEnd ist, dann ist kein Umherkreisen erforderlich
und die Prozedur bewegt sich zum Schritt 110, wobei pWritetemp + O1 gleich dem neuen aktuellen pWrite
gemacht wird. Die neuen Daten können
gespeichert werden. Die Routine geht dann zu ENDE 116 und erwartet
einen neuen Schreibbefehl.
-
Die
Routine 150 wird nun mit Bezug auf 6A beschrieben,
wobei ein inkrementierender Puffer angenommen wird. In einem ersten
Schritt 152 wird der Wert von pWritetemp auf
pBegin gesetzt (wobei das Umherkreisen von pWrite vorbereitet wird).
Im Schritt 153 wird pWrttetemp um
O1 und einen header vergrößert, und es
wird bestimmt, ob dieser neue Wert größer als der aktuelle pRead
ist. Falls JA, gibt es nicht genügend
Speicher in dem Puffer, keine Zuordnung ist möglich, und die Routine 150 geht
zu einem anderen Puffer oder der Routine 200 oder die Daten
werden im Schritt 154 verworfen. Falls NEIN, wird das aktuelle
pWrite mit pRead im Schritt 155 verglichen. Falls pWrite
nicht gleich dem aktuellen pRead ist, dann hat pRead nicht Anschluss an
pWrite gefunden. Dies ist ein Zeichen dafür, dass pWrite im Prozess des
Umherkreisens steckt, wohingegen dies für pRead nicht zutrifft, und
in diesem Fall wird FlagLoop auf WAHR im Schritt 156 gesetzt
und die Routine fährt
mit dem Schritt 158 fort.
-
Falls
im Schritt 155 bestimmt wird, dass das aktuelle pWrite
gleich pRead ist, dann hat pRead Anschluss an pWrite gefunden und
der Puffer ist vollständig
leer. In diesem Fall wird pRead gleich pBegin im Schritt 157 gesetzt.
Dies bedeutet auch, dass sowohl pRead als auch pWrite ein Umherkreisen
zur gleichen Zeit durchgeführt
haben und sich FlagLoop nicht ändert.
Ebenso ist die aktuelle Nachricht (an der Stelle, auf welche das
aktuelle pWrite zeigt) die letzte Nachricht in dem Puffer, und der
Status dieser Nachricht wird auf ENDE im Schritt 158 gesetzt.
Im Schritt 159 kehrt die Routine zum Schritt 110 in
Routine 100 zurück,
pWritetemp + O1 wird auf das neue pWrite
gesetzt, und die Daten werden in dem Speicher gespeichert.
-
Bewegungen
von pRead werden mit Bezug auf die Routine 160 und 6B und
einen inkrementierenden Puffer beschrieben. In einem ersten Schritt 162 wird
bei einer Nachricht, welche freizugeben ist, der Status auf FREI
gesetzt. Im Schritt 163 wird bestimmt, ob pRead auf die
Nachricht zeigt, welche freizugeben ist. Falls nicht, dann liegt
die Nachricht in dem Körper
des zugeordneten Speichers in dem Puffer, und diese Nachricht kann
ohne ein Verändern
von pRead freigegeben werden. Die Prozedur geht zu ENDE 163 und
erwartet die nächste
Nachricht, welche freizugeben ist. Falls JA, wird die Nachricht
freigegeben und pRead zeigt nun auf diese Nachricht, welche freigegeben
wurde, d.h. sie besitzt den FREI-Status, wie er in Schritt 161 eingestellt
wird. In den nächsten
Verfahrensschritten muss die Routine pRead zur nächsten Nachricht mit einem BENUTZT-Status
bewegen oder, falls es keine derartige Nachricht gibt, pRead zu
pBegin zurückschicken.
-
Es
wird im Schritt 165 bestimmt, ob pRead nicht gleich pWrite
ist, und pRead zeigt auf eine FREIE Nachricht. In dem vorliegenden
Fall besitzt die Nachricht einen FREI-Status, und vorausgesetzt,
pWrite ist nicht gleich pRead, wird pRead im Schritt 168 an
den Beginn der nächsten
Nachricht nach dieser Frei-Nachricht gebracht. D.h., pRead wird
zu dem aktuellen Wert von pRead + O1 gebracht. Im Schritt 169 wird
bestimmt, ob pRead nun auf eine Nachricht mit einem ENDE-Status
zeigt. Falls ja, dann muss pRead ein Umherkreisen ausführen, und
pRead wird auf pBegin gesetzt und FlagLoop wird auf FALSCH im Schritt 170 gesetzt.
Falls NEIN im Schritt 169 oder nachdem der Schritt 170 ausgeführt wurde,
kehrt die Routine zu Schritt 165 zurück, wobei sie nach einer Nachricht
sucht, welche keinen FREI-Status hat oder wenn pRead pWrite erreicht
hat. Wenn beim Zurückkehren
zu Schritt 165 pRead noch auf eine FREI-Nachricht zeigt
und pRead nicht gleich pWrite ist, muss pRead weiter durch Wiederholen
der Schritte 168 bis 170 bewegt werden.
-
Falls
im Schritt 165 NEIN vorhanden ist, gibt es zwei Möglichkeiten.
Diese werden im Schritt 166 bestimmt. Falls pRead = pWrite,
dann ist der Puffer leer und die Anfangseinstellungen können im
Schritt 167 eingestellt werden und die Routine geht zu
ENDE 163 und erwartet die nächste Nachricht, welche freizugeben ist.
Falls im Schritt 166 NEIN, zeigt pRead nicht auf eine FREI-Nachricht,
d.h. es zeigt auf die erste BENUTZTE Nachricht, die ihm begegnet
ist. Die Routine verlässt
pRead bei diesem Wert und geht heraus zu ENDE 163 und erwartet
den nächsten
Befehl, um eine Nachricht freizugeben.
-
Die
Routine 200 wird nun mit Bezug auf 7 beschrieben.
Im Schritt 202 wird ein neuer Puffer im Speicher initialisiert,
und pWrite wird = pRead = pBegin gesetzt und FlagLoop = FALSCH im
Schritt 203. Im Schritt 204 kehrt diese Routine
zurück
zum Schritt 101 der Routine 100 (5).
-
Ein
praktisches Beispiel der Anwendung der vorliegenden Erfindung wird
nun mit Bezug auf 8 beschrieben. Nehme man an,
dass eine integrierte Schaltung, welche eine Datenverarbeitung ausführt, auf
die 2 Kanäle
zugreifen kann, welche Daten auf den physikalischen UMTS-Kanälen bei
dem Spreizfaktor (SF) 4 oder 4 Kanäle bei SF8 oder 8 Kanäle bei SF16
tragen. In diesem Beispiel unterscheiden sich die Kanäle nur durch
die Datenrate, welche sie benutzen:
1 Kanal bei SF4 benötigt bis
zu 2400 Bytes pro Rahmen für
den Speicherraum
1 Kanal bei SF8 benötigt bis zu 1200 Bytes pro
Rahmen für
den Speicherraum
1 Kanal bei SF16 benötigt bis zu 600 Bytes pro Rahmen
des Speicherraums
-
So
können,
wenn ein SF4-Kanal geschlossen wird, zwei SF8-Kanäle oder
SF16-Kanäle
geöffnet
werden.
-
Zu
einer gegebenen Rahmenzeit nehme man an, dass 4 Kanäle auf dieser
integrierten Schaltung (IC) aktiv sind und eine Echtzeitverarbeitungsaufgabe
A Daten zu einer anderen Empfangsaufgabe B sendet. Die Annahme bei
dem Echtzeitsystem besteht darin, dass Nachrichten, welche durch
die Aufgabe A gesendet werden, nicht öfter als einmal für jeden
UMTS-Rahmen (10
ms) gesendet werden und dass sie wenigstens einmal bei jedem Rahmen
emp fangen und freigegeben werden. Dies bedeutet, dass alle Daten,
welche während
eines Rahmens empfangen werden, durch den nächsten Rahmen verbraucht werden.
-
Die
Kanäle
können
deaktiviert werden, und neue Kanäle
können
geschaffen werden, sobald die gesamte Datenrate, welche durch den
IC bearbeitet wird, nicht größer als
2 SF4 ist, mit den Äquivalenten,
welche zuvor gegeben wurden. In einem Szenario, welches typisch
für den
Betrieb eines Breitbandzell-Telekommunikationssystems sein kann,
können,
nach der Anfangssituation, wo 4 SF8-Kanäle aktiv sind, diese Ereignisse stattfinden:
Kanal
1 ist deaktiviert
zwei SF8-Kanäle werden geschaffen: 1a und
1b
Kanal 3 und 4 sind deaktiviert
ein neuer Kanal 3 wird
bei SF4 geschaffen.
-
Die
erste Situation bei einem herkömmlichen
Puffer wird betrachtet. Da es keinen Schutz der Daten gibt, welche
in dem Puffer beim Umherkreisen zugeordnet sind, müssen die
Kommunikationskanäle
unterschiedliche Ringpuffer benutzen. Da sich die Datenrate eines
gegebenen Kanals erhöhen
kann, ist es notwendig, die Puffer auf das Maximum, welches von
einem Kanal benötigt
wird, zu dimensionieren. Ein Puffer, welcher geschaffen ist, einen
SF4-Kanal handzuhaben, kann für
einen SF8-Kanal benutzt werden, und ein Puffer, welcher für einen
SF8-Kanal geschaffen ist, kann für
einen SF16-Kanal benutzt werden. Der notwendige Speicher, um die
Kanäle
in dem IC handzuhaben, ist:
2 SF4: 2 × 2400 = 4800 Bytes
2
SF8: 2 × 1200
= 2400 Bytes
4 SF16: 4 × 600
= 2400 Bytes
Insgesamt: 9600 Bytes
-
Mit
Bezug auf 8 werden im Falle eines Ringpuffers
entsprechend einer der Ausführungsformen der
vorliegenden Erfindung alle Kanäle,
sogar wenn sie Daten bei unterschiedlichen Datenraten tragen, in
den gleichen Ringpuffer gegeben. In 8 gibt pW
pWrite wieder und pR gibt pRead wieder. Die Fläche, welche diesem Puffer zugeordnet
ist, ist gleich dem Speicher für
2 SF4-Kanäle,
so dass 2 × 2400
Bytes = 4800 Bytes sind. Wie in 8 in den
Schritten 1, 2, 3 und 4 gezeigt wird, ordnet die Aufgabe A erfolgreich
vier Bereiche zu, um die Daten für
den SF8-Kanal 1 (1200 B), 2, 3 und 4 zu speichern. Der Ringpuffer
ist dann voll, und da pRead = pWrite und FlagLoop = FALSCH ist,
kann kein weiterer Speicher zugeordnet werden (Schutzmechanismus).
Im Schritt 5 wird der Kanal 2 durch die Aufgabe B bearbeitet, und
dessen zugeordneter Speicherbereich wird freigegeben. Man beachte,
dass Bereiche in jedem Fall freigegeben werden können. Löcher werden in dem Speicher
zurückgelassen,
aber das Echtzeitsystem stellt sicher, dass sie aufgrund des Freigebens
aller Daten innerhalb einer Rahmenzeitdauer natürlich in freie Bereiche gewandelt
werden. Im Schritt 6 wird der Kanal 1 bearbeitet, und sein Bereich
wird freigegeben. An diesem Punkt nehme man an, dass der Kanal 1
deaktiviert wird und dass zwei andere Kanäle aufgestellt werden: SF16-Kanal
1a und 1b. Man beachte, dass Kanäle mit
variabler Rate gehandhabt bzw. behandelt werden, sobald der Puffer
den Gesamtbetrag des zugeordneten Speichers behandeln kann. Im Schritt
7 sendet die Aufgabe A neue Daten an den Kanal 2. Man beachte, dass es
immer möglich
ist, Speicher für
diesen Kanal zuzuordnen, da angenommen wird, dass neue Daten nur
mit 1 UMTS-Rahmen
nach jeweiligen vorherigen Daten gesandt werden können. Deshalb
müssen
die Kanal-1-Daten bereits freigegeben worden sein, wenn der Kanal-2-Bereich
zugewiesen wird. Beim Schritt 8 sendet die Aufgabe A Daten auf den
Kanälen
1a und 1b. Beim Schritt 9 und 10 gibt die Aufgabe Daten der Kanäle 3 und
4 frei, und diese zwei Kanäle
werden deaktiviert. Beim Schritt 11 wird ein neuer Kanal bei SF4
geschaffen: 3a. Die Aufgabe A sendet Daten auf den Kanälen 3a.
-
Entsprechend
besteht der Speicher, welcher entsprechend der vorliegenden Erfindung
benutzt wird, aus 4800 Bytes, wohingegen 9600 Bytes mit herkömmlichen
Ringpuffern erforderlich sind. Der Fachmann wird würdigen,
dass der Nutzen der vorliegenden Erfindung in einem oder mehreren
des Folgenden liegt:
- – geringerer Gebrauch des Speichers,
- – höhere Flexibilität, um Kanäle hinzufügen (z.B.
falls 16 SF32 gehandhabt werden müssen, müssen bei herkömmlichen
Systemen Puffer hinzugefüngt
werden, jedoch nicht bei den Ausführungsformen der vorliegenden
Erfindung).
-
Im
Gegensatz zu herkömmlichen
Implementierungen ist es möglich,
Speicher der genau benötigten Größe zuzuordnen.
Diese vorliegende Erfindung gestattet es, einen einzelnen Puffer
für alle
Raten zu benutzen. Dies ist ein beträchtlicher Vorteil, da N 384
kbps-Transportkanäle
oder 32 × N
12 kbps-Kanäle
den gleichen Betrag an Speicher erfordern, jedoch mit mehr oder
weniger Nachrichten. Die zu bestimmende Größe besteht in der Gesamtgröße, und
somit wird der Speicher optimal benutzt, indem nur erforderlich
ist, einen Ringpuffer der exakten Größe zu reservieren, welche genutzt
werden wird. Die Speicherzuordnungsfunktion kann leicht erhalten
werden: Sie ist der verfügbare
Bereich an Speicher zwischen pWrite und pRead (oder pRead zu pEnd
+ pBegin zu pWrite, falls FlagLoop WAHR ist).
-
Die
vorliegende Erfindung kann in Hardware oder zum Beispiel Software
implementiert werden, wobei eine Verarbeitungsmaschine, wie z.B.
ein Mikroprozessor oder eine programmierbare logische Einrichtung (PLD),
wie z.B. ein PLA (programmierbares logisches Feld), ein PAL (programmierbare
Feldlogik), ein FPGA (feldprogrammierbares Gate-Feld) genutzt werden
kann.
-
Ein
Beispiel einer derartigen Schaltung 40 wird mit Bezug auf 9 für einen
Mobilfunk-Telefonempfänger/-sender
beschrieben. Diese Grundbandschaltung 40 kann so wie ein
VLSI-Chip um einen
eingebetteten Mikroprozessor 30 aufgebaut sein, z.B. ein
ARM7TDMI-Kern, welcher von ARM Ltd., UK, gestaltet ist, welcher auf
einem einzelnen Chip mit den anderen gezeigten Komponenten synthetisiert
sein kann. Ein Null-Wartezustand-SRAM-Speicher 22 kann
auf einem Chip, ebenso wie auf einem Cache-Speicher 24,
vorgesehen sein. Verschiedene E/A-(Eingangs/Ausgangs-)Interfaces 25, 26, 27 können vorgesehen
sein, z.B. UART, USB, I2C-Bus-Interfaces,
sowie ein E/A-Auswähler 28.
FIFO-Puffer 32 können
benutzt werden, um den Prozessor 30 von dem Datentransfer über diese
Interfaces zu entkoppeln. Ein Zähler/Zeitgeber-Block 34 kann
ebenso wie eine Unterbrechungssteuerung 36 vorgesehen sein.
Das Interface für
das Radiofrequenzteil wird durch den Block 42 vorgesehen,
welches das Multiplexen und Demultiplexen der Vielfachnutzer-Grundbanddatenrahmen
ebenso wie das Übertragen
zu und das Empfangen von dem Radiofrequenz-Leistungsmodul 44 handhaben
kann. Die vom Block 42 empfangenen Grundbanddaten werden
zu dem Prozessor 30 für
das Weiterverarbeiten geführt.
Software-Programme können
in einem internen ROM (Festwertspeicher) 46 gespeichert werden.
Ein Zugriff auf einen externen Speicher kann über ein externes Bus-Interface 38 mit
Adress-, Daten- und Steuerungsbussen vorgesehen werden. Die verschiedenen
Blöcke
der Schaltung 40 sind über
gewöhnliche
Busse 31 miteinander verbunden.
-
Der
Ringpuffer-Steuerungsmechanismus der vorliegenden Erfindung kann
als Software implementiert werden, um auf einem Prozessor 30 zu
laufen. Der Ringpuffer kann in einem SRAM-Speicher 22 unter
der Steuerung des Prozessors 30 implementiert sein. Die
oben beschriebenen Prozeduren können
als Computerprogramme in einer gewöhnlichen Computersprache, wie
z.B. C, geschrieben sein und dann für den speziellen Prozessor
in der eingebetteten Ausführung
kompiliert sein. Beispielsweise kann für den eingebetteten ARM-Kern
VLSI, welcher oben beschrieben ist, die Software in C geschrieben
sein und dann unter Benutzung des ARM-C-Compilers und des ARM-Assemblers
kompiliert werden.
-
Während die
Erfindung mit Bezug auf bevorzugte Ausführungsformen gezeigt und beschrieben
wurde, wird von Fachleuten verstanden werden, dass verschiedene Änderungen
oder Modifikationen in der Gestaltung und im Detail durchgeführt werden
können,
ohne vom Umfang und dem Geist dieser Erfindung abzuweichen. Beispielsweise
ist ein Problem bei Schemata des Speichermanagements die Speicherfragmentierung. Diese
tritt auf, wenn Nachrichten innerhalb des zugewiesenen Bereiches
(zwischen pRead und pWrite) freigegeben werden, jedoch nicht nahtlos.
Einige Löcher
treten in dem Bereich auf, und der pRead-Zeiger wird nicht vorwärts bewegt,
bis die Nachricht, auf welche er zeigt, freigegeben ist. Einiger
Speicherraum ist nicht verfügbar,
sogar wenn er nicht benutzt wird. Dieses Problem kann durch eine <<Speicherbereinigung>>-Funktion oder
durch ein Defragmentierprogramm gelöst werden, welches FREI-Bereiche
in einem größeren, welcher
für andere
Nachrichten verfügbar
ist, verketten würde.
Dies würde
weiteres Verarbeiten und ein Speichermanagement erfordern, welches
Zeit für
das Defragmentieren des Speichers zulassen muss. Jedoch sind die
Ausführungsformen
der Erfindung, welche oben veröffentlicht
ist, nahezu optimal, da die Datenströme, welche verarbeitet werden,
flüchtig
sind, was bedeutet, dass sie eine begrenzte Lebensdauer in dem Echtzeitsystem
besitzen. Diese Ausführungsformen
werden in dem Sinne optimiert, dass, wenn Nachrichten auf einer
Seite des Puffers zugeordnet sind, die nachfolgenden Nachrichten
auf der anderen Seite freigegeben sind, da Daten in der begrenzten
Zeit von einem Rahmen auf dem Funk-Interface zu übertragen sind. Dies führt zu Implementierungen,
welche auf die Real-Time-Charakteristika der Information, welche
zu verarbeiten ist, angewendet werden, d.h. Information von bekannter
begrenzter Lebensdauer und hochvariabler Datenrate. Ferner wurde auf
Adresswerte Bezug genommen, welche im Speicher gespeichert sind.
Diese Werte können
entsprechend jeglicher Art von Adressenreferenzbildung sein und
das Spezifizieren von Adressen mit Hilfe von Offsets und einer Basisadresse
beinhalten.
-
Während die
Erfindung mit Bezug auf bevorzugte Ausführungsformen gezeigt und beschrieben
wurde, wird von Fachleuten verstanden werden, dass verschiedene
Veränderungen
und Modifikationen in der Art und im Detail durchgeführt werden
können,
ohne vom Umfang und vom Geist dieser Erfindung abzuweichen, wie sie
in den angefügten
Ansprüchen
definiert sind. Beispielsweise müssen
in Ausführungsformen
der vorliegenden Erfindung, welche von zusätzlichen Feldern einer Nachricht
für beispielsweise
ein Steuerwort 8 Gebrauch machen, zeitweilige Pufferadressen,
wie z.B. pWritetemp, durch zusätzlichen
Speicher inkrementiert sein, welcher für das zusätzliche Feld (die zusätzlichen
Felder) z.B. durch die Daten, 2 × headers (Nachrichtenköpfe) und
das zusätzliche
Feld (die zusätzlichen
Felder) in den Schritten, wie z.B. 106, 112, 153,
und durch die Daten, 1 × header
(Nachrichtenkopf) und das zusätzliche
Feld (die zusätzlichen
Felder) in den Schritten, wie z.B. 110 und 168,
erforderlich ist.