home *** CD-ROM | disk | FTP | other *** search
- CRC-Sicherung (cyclic-redundancy-check) per Software
-
- Beim Einsatz von Rechnern werden binäre Daten zwischen den Verarbei-
- tungskomponenten ausgetauscht. Insbesondere bei der seriellen Über-
- tragung verfälschen Störungen auf der Leitung die gesendeten Infor-
- mationen. Um das Problem zu beheben, existieren verschiedene Ver-
- fahren zur Fehlererkennung und -korrektur. Ist die Übertragung im
- Fehlerfall leicht wiederholbar, beschränkt man sich aus Aufwands-
- gründen meist auf die Fehlererkennung. Zu diesem Zweck wird, neben
- Verfahren wie Paritäts-, Längs- und Quersummerprüfung, die CRC -
- Sicherung eingesetzt. Die CRC-Prüfung (z.B. in Floppy Controllern)
- erfolgt dabei in der Regel mittels spezieller Bausteine. In der
- täglichen Praxis treten jedoch immer wieder Fälle auf (z.B. bei
- Übertragungsprotokollen auf V24 Leitungen), wo entsprechende Hard-
- warekomponenten aus den unterschiedlichsten Gründen nicht einsetz-
- bar sind. Hier kann eine softwaremäßige CRC-Berechnung gute Dienste
- leisten. Die verfügbare Literatur behandelt das Thema CRC-Sicherung
- teilweise recht stiefmütterlich, insbesondere was konkrete Software-
- algorithmen angeht. Die vorliegende Toolbox enthält deshalb konkrete
- Programmlösungen in Turbo Pascal 4.0 / 5.0 und Assembler. Die Module
- lassen sich sowohl in Turbo Pascal, Assembler und Quick Basic 4.x
- einbinden. Eine Portierung für weitere Sprachen ist möglich, da alle
- Module im Quellcode vorliegen.
-
-
- Einleitung
-
- Datenübertragung zwischen Rechnern, oder zu Datenendgeräten, erfolgt
- häufig mittels serieller Verbindungen. Als Problem erweisen sich
- Störungen während der Übertragung, die im Empfänger zu fehlerhaften
- Ergebnissen führen. Eine Hauptaufgabe der Datenkommunikation besteht
- deshalb in der Fehlererkennung und -korrektur. Da Fehlerkorrekturen
- recht aufwendig sind, wird diese Methode nur dort angewandt, wo die
- Daten nicht oder nur mit großem Aufwand, wiederbeschaffbar sind (z.B.
- Satellitenübertragung). In allen anderen Fällen reicht eine sichere
- Fehlererkennung, da der Sender die Daten gegebenenfalls neu übertragen
- kann. Bei einfachen Anwendungen erfolgt die Sicherung mittels Paritäts-
- bits (z.B. Terminal- und Druckerverbindungen). Verbesserte Übertra-
- gungsverfahren verwenden Längs- und Querparitätsprüfungen zur Erhöhung
- der Sicherheit. Gemeinsam ist allen Varianten die leichte Realisier-
- barkeit, aber auch das Problem, daß Mehrfachfehler nicht immer sicher
- erkannt werden können. Aufbauend auf dieser Erkenntnis benutzen
- höherwertigere Übertragungsverfahren die CRC-Methode zur Codesicherung
- (z.B. HDLC / SDLC, Floppy- / Plattenaufzeichnung, etc.). Durch Auswahl
- geeigneter Sicherungspolynome kann die geforderte Fehlerzahl pro Nach-
- richt sicher erkannt werden. Da die Aufgabe aufwendiger als eine reine
- Paritätsprüfung ist, verwendet man in der Regel spezielle Bausteine.
- In der Praxis kommt es jedoch immer wieder vor, daß eine CRC-Sicherung
- erforderlich wird, ohne daß entsprechende Hardware eingesetzt
- werden kann. Ein Beispiel ist die Implementierung von zeichenorien-
- tierten Übertragungsprozeduren mit einer Fehlererkennung per cyclic -
- redundancy - check. Hier kommt dann nur eine Softwarelösung in Frage.
- Da nicht alle Prozessoren mit entsprechenden Befehlen ausgestattet
- sind, werden nachfolgend entsprechende Programme vorgestellt.
-
-
- Grundlagen der CRC-Berechnung
-
- Die Grundlagen der CRC - Berechnung wurden in
-
- Born G. : CRC - Sicherung (cyclic redundancy check) per
- Software. Zeitschrift Toolbox, 1989, DMV Verlag Eschwege
-
- diskutiert. Die Codesicherung beruht auf der Tatsache, daß sich eine
- Folge von Binärzeichen durch ein Polynom dividieren läßt. Die Binär-
- zeichen, sowie der Divisionsrest werden anschließend übertragen. Im
- Empfänger wird dann die komplette Zeichenfolge (Nutzdaten und Divi-
- sionsrest) durch das gleiche Polynom dividiert. Bei fehlerfreier
- Übertragung ist dann der Divisionsrest = 0. Andernfalls liegt ein
- Übertragungsfehler vor. Im Gegensatz zu Paritätsprüfungen erlaubt
- das CRC-Verfahren auch die zuverlässige Erkennung von Mehrfachfehlern.
-
-
- Der Inhalt der Toolbox Diskette.
-
- Auf der Diskette befinden sich nachfolgend aufgeführte Dateien:
-
-
- README.DOC Die Datei mit der vorliegenden Dokumentation
-
- CRC.ASM Assembler Quellprogramm zur CRC - Berechnung
-
- CRCA.ASM Assembler Quellprogramm zur CRC - Berechnung
- CRCA.OBJ Objectdatei zur Einbindung in Hochspracheprogramme
-
- DEMO.BAS Demonstrationsprogramme mit Hinweisen zur
- DEMO1.PAS Anwendung der CRC - Routinen
- DEMO2.PAS
- DEMO3.PAS
-
-
-
- Das Programm CRC.ASM
-
- Dieses Programm enthält einen Algorithmus zur Berechnung der
- CRC - Checksumme und ist in Assembler (8086) formuliert. Die
- Parameterübergabe erfolgt in den Registern. Das Programm eignet
- sich im wesentlichen zur Einbindung in Assemblerroutinen und
- als Rumpf zur Portierung für verschiedene Sprachen.
-
-
- Die Module CRCA.ASM und CRCA.OBJ
-
- Bei diesen Modulen handelt es sich um die Anpassung des Programmes
- CRC.ASM für verschiedene Hochsprachen. Das Quellprogramm liegt als
- Assemblerdatei (CRCA.ASM) vor. Die Datei CRCA.OBJ wurde bereits
- durch einen Assembler übersetzt und läßt sich direkt in Hoch-
- spracheprogramme einbinden. Dabei gelten folgende Aufrufkon-
- ventionen:
-
- * Die Parameterübergabe erfolgt über den Stack, wobei
- Adressen als FAR Pointer übergeben werden.
-
- * Der Aufruf muß folgendem Format entsprechen:
-
- CALL CRC (CRC_Register, Buffer, Zeichenzahl)
-
- CRC_Register : 16 Bit (Word) Variable in der der Startwert
- zur CRC - Berechnung übergeben wird (z.B. 0).
- Nach dem Aufruf enthält die Variable das
- Ergebnis der CRC - Berechnung
-
- Buffer : Zeichenpuffer mit n Bytes, über die die
- CRC - Berechnung durchzuführen ist.
-
- Zeichenzahl : Zahl der Zeichen im Buffer, die in die Be-
- rechnung eingehen.
-
- Die zwei Parameter CRC_Register und Buffer sind als Adressen
- (Call by reference) zu übergeben, während die Zeichenzahl
- als Wert (Call by value) gesetzt wird.
-
- * Die Procedur CRC ist als FAR - CALL aufzurufen, da die
- Procedur über eine RETF Instruktion verlassen wird.
-
- Die Einbindung der Procedur in ein Turbo Pascal 4.0 und 5.0
- Programm wird mit dem Programm DEMO3.PAS demonstriert. Die
- Objectdatei wird über den Schalter {$L CRCA.OBJ} eingebunden.
- Wichtig ist dabei, daß der Schalter {$F+} für das FAR Modell
- gesetzt wird. Nähere Einzelheiten sind dem Modul DEMO3.PAS
- zu entnehmen.
-
- Bei Einsatz in Quick Basic wird das Microsoft Mixed Language
- Interface benutzt (Medium Modell). Die Datei DEMO.BAS ent-
- hält ein Beispiel zur Benutzung des Moduls CRCA.OBJ. Ein
- Einsatz ist nur mit dem Basic Compiler (BC) möglich. Die
- Linkanweisung für die Einbindung der Objectdatei erfolgt
- gemäß folgender Notation:
-
- LINK xxx.obj+....obj+CRCA.OBJ
-
- Die Anweisungen für das Programm DEMO.EXE lauten dann:
-
- BC DEMO.BAS
-
- LINK DEMO.OBJ+CRCA.OBJ
-
- Wichtig ist in Quick Basic, daß als Puffer keine Stringadresse
- übergeben wird, da der Compiler in der Regel die Adresse des
- Stringdescriptors einsetzt. Die eigentliche Stringadresse steht
- dann an anderer Stelle im Speicher.
-
-
- Die Dateien DEMO1.PAS und CRC.PAS
-
- In der Datei CRC.PAS ist die Implementierung des CRC - Verfahrens
- mittels Polynomdivision gespeichert. Das Programm DEMO1.PAS zeigt
- die Einbindung in eigene Programme. Es gelten im Prinzip die
- gleichen Übergabekonventionen für CRCA.ASM. Nähere Einzelheiten
- sind dem jeweiligen Quelltext zu entnehmen.
-
-
- Die Dateien DEMO2.PAS und CRCF.PAS
-
- Neben der Polynomdivison existiert ein wesentlich effizienteres
- Verfahren zur CRC - Berechnung über Lock Up Tabellen, welches
- von Stuard Wecker publiziert wurde. Damit läßt sich eine erheb-
- liche Geschwindigkeitssteigerung erreichen. Das Turbo Pascal
- Programm CRCF.PAS enthält eine Implementierung dieses Verfahrens.
- Das Programm DEMO2.PAS zeigt die Einbindung in eigene Routinen.
-
-
-