vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Zippen wie die Profis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fortgeschrittene Programmierung
Noch näher an der Beschreibung: 
Autor: Analyzer
Datum: 26.04.03 13:49

Hey,

das obige noch näher an die Vorgabe angelehnt, könnte als grobe Auflösung so aussehen:

'1. Den alten CRC mit 1 Left-Shiften (wenn nicht vorhanden dann &H0)
'2. Das das zu addierende Byte mit 7 Right-Shiften
'3. Die werte aus 1 & 2 mit OR verbinden
'4. Wenn das erste BIT des wertes bei 1. gesetzt ist dann 3. per XOR mit &H1021 
' verbinden
'5. Punkt 1. bis 4. für jedes Bit wierholen (Also 8 Schleifen)
 
PRIVATE FUNCTION CrcTest()
    DIM crc AS INTEGER
    DIM ch  AS BYTE
    DIM tmp AS INTEGER
 
    ch=128    'Binär: 10000000
    crc = 10  'Binär: 00000000 00001010
 
    '1. Den alten CRC mit 1 Left-Shiften (wenn nicht vorhanden dann &H0)
    tmp = crc 'siehe Bedingung aus 4. (bei oder nach?)
    crc = crc * 2^1 'Binär: 00000000 00010100
    '2. Das das zu addierende Byte mit 7 Right-Shiften
    ch = ch \ 2^7   'Binär: 00000001
    '3. Die werte aus 1 & 2 mit OR verbinden
    crc = crc OR ch
    '4. Wenn das erste BIT des wertes bei 1. gesetzt ist dann 3. per XOR mit 
    ' &H1021 verbinden
    IF (tmp AND 2^0) THEN crc = crc XOR &H1021
    '5. ?
END FUNCTION
Welche der beiden Möglichkeiten entsprechen nun dem richtigen Ergebnis? Bevor ich an Punkt 5 weitermache?

Ich habe noch eine Feinheit entdeckt. Wieso rufst Du bei jedem Byte die Funktion auf? Wird da nur 1 Byte geprüft oder ist es ein ganzer Ausdruck. Vielleicht ein String mit der Länge von vielleicht 2048 Bytes? Wenn das so ist, so habe ich Deine Funktion mit GetTickCount() geprüft.
Ergebnis:

Deine Funktion ergibt bei 5 Millionen Bytes

1. 19203 mS
2. 19235 mS
2. 19141 mS

Wird der Ausdruck aber direkt in der Funktion verarbeitet, also nicht bei jedem Byte die Funktion aufgerufen, so erhält man folgende Werte:

1. 14468 mS
2. 14500 mS
3. 14484 mS

Der einzelne Funktionsaufruf schlägt also mit fast 5000 mS zu Buche. Ich vermute aber,
dass es einen Grund gibt, mit jedem Byte die Funktion aufzurufen, oder?

Das Verhalten ist eigentlich logisch, wenn man der CPU zusieht was passiert, wenn eine Funktion aufgerufen wird:

Die CPU-Registerinhalte werden auf den Stack gesichert.
Die Übergabeparameter werden von links nach rechts auf den Stack gepushed
Der Funktionszeiger (Funktionseinsprung) wird auf den Stack gepushed
Die Funktion wird nun ausgeführt.
Der Stack wird abgeräumt
Die CPU-Registerinhalte wieder gepoppt.

Das alles mal 5 Millionen. Jede Menge CPU-Zyklen nur wegen des einzelnen Funktionsaufrufs. Das allein ist zwar schon ein Faktor, aber mit Sicherheit nicht die
Lösung des Gesamtproblems.
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
CRC16 mit VB6 (Letzte rettung)837LonelySuicide66623.04.03 20:23
Re: CRC16 mit VB6 (Letzte rettung)4.386unbekannt23.04.03 20:40
Re: CRC16 mit VB6 (Letzte rettung)506LonelySuicide66624.04.03 20:26
Re: CRC16 mit VB6 (Letzte rettung)4.508Wöllmi23.04.03 21:53
Hier der Code4.583Wöllmi23.04.03 21:56
Re: Hier der Code Teil 24.453Wöllmi23.04.03 21:57
Re: Hier der Code500LonelySuicide66624.04.03 19:47
Re: Hier der Code4.683unbekannt24.04.03 22:03
Re: Hier der Code478LonelySuicide66625.04.03 06:00
Re: Hier der Code4.413unbekannt25.04.03 17:22
Oh Mann natürlich umgekehrt 4.294unbekannt25.04.03 17:30
Re: Oh Mann natürlich umgekehrt 491LonelySuicide66625.04.03 20:15
Re: Oh Mann natürlich umgekehrt 4.276unbekannt25.04.03 20:28
Re: Oh Mann natürlich umgekehrt 478LonelySuicide66626.04.03 12:29
Re: CRC16 mit VB6 (Letzte rettung)485Analyzer26.04.03 12:59
Noch näher an der Beschreibung:490Analyzer26.04.03 13:49
Re: Noch näher an der Beschreibung:477LonelySuicide66626.04.03 15:27
Re: Noch näher an der Beschreibung:471Analyzer26.04.03 17:12
Re: Noch näher an der Beschreibung:467LonelySuicide66626.04.03 20:56
Anregung: CRC16 mit Tabelle5.430Wöllmi26.04.03 23:00
Habe Routine für CRC16 Tabelle5.270Wöllmi27.04.03 22:39
Re: Habe Routine für CRC16 Tabelle474LonelySuicide66628.04.03 10:47
Re: Habe Routine für CRC16 Tabelle4.963Wöllmi28.04.03 22:58
&h270C muß rauskommen4.383Wöllmi28.04.03 23:00
Re: CRC16 mit VB6 (Letzte rettung)4.592Swiss Ueli30.04.03 18:26
Re: CRC16 mit VB6 (Letzte rettung) - Teil 24.489Swiss Ueli30.04.03 18:30

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel