Hi
Ich hab das jetzt etwas anders gelöst.
So funktioniert es jetzt einwandfrei. ich hab extra 3 Strings genommen, die sich überschneiden, damit er auch was findet, wenn z.B. "<ENDE>" genau an der Grenze der Strings steht.Code:$regfile = "m32def.dat" $crystal = 16000000 $lib "mmc.lib" Config Lcdpin = Pin , Db4 = Portc.5 , Db5 = Portc.4 , Db6 = Portc.3 , Db7 = Portc.2 , E = Portc.7 , Rs = Portc.6 Config Lcd = 16 * 4 Dim Abuffer As String * 512 At $60 ' Hold Sector to and from CF-Card Dim String1 As String * 254 At $60 Overlay Dim String2 As String * 254 At $10a Overlay Dim String3 As String * 171 At $1b4 Overlay $include "config_mmc.bas" Dim Berror As Byte Dim Wsrampointer As Word ' Address-Pointer for write Dim Lsectornumber As Long ' Sector Number Dim Ende As Byte Dim S_position As Word Dim S_position2 As Byte Dim S_position3 As Byte Dim E_position As Word Dim E_position2 As Byte Dim E_position3 As Byte Dim S_sektor As Long Dim E_sektor As Long Dim Datenmenge As Word Dim Temp As Word Ende = 0 Lsectornumber = 0 Cls If Gbdriveerror = 0 Then Cls Do Wsrampointer = Varptr(abuffer) Berror = Drivereadsector(wsrampointer , Lsectornumber) If S_position = 0 Then S_position = Instr(1 , String1 , "<START>") S_position2 = Instr(1 , String2 , "<START>") S_position3 = Instr(1 , String3 , "<START>") If S_position2 <> 0 Then S_position = S_position2 + 170 End If If S_position3 <> 0 Then S_position = S_position3 + 340 End If S_sektor = Lsectornumber End If If S_position <> 0 Then E_position = Instr(1 , String1 , "<ENDE>") E_position2 = Instr(1 , String2 , "<ENDE>") E_position3 = Instr(1 , String3 , "<ENDE>") If E_position2 <> 0 Then E_position = E_position2 + 170 End If If E_position3 <> 0 Then E_position = E_position3 + 340 End If If E_position <> 0 Then E_sektor = Lsectornumber Ende = 1 End If End If Incr Lsectornumber Loop Until Ende = 1 Else Lcd "Fehler :-(" End If If S_sektor = E_sektor Then Datenmenge = S_position + 7 Datenmenge = E_position - Datenmenge Else Datenmenge = S_position + 6 Datenmenge = 512 - Datenmenge Temp = E_sektor - S_sektor Temp = Temp - 1 Temp = Temp * 512 Datenmenge = Datenmenge + Temp Datenmenge = Datenmenge + E_position Datenmenge = Datenmenge - 1 End If If Gbdriveerror = 0 Then Cls Lcd S_sektor ; ":" ; S_position ; "-" ; E_sektor ; ":" ; E_position 'Lcd E_position ; "--" ; E_position2 Locate 2 , 1 Lcd "Menge: " ; Datenmenge ; " Bytes" Thirdline Lcd "Text" End If End 'end program 'end program
Nun muss ich aber noch den Sonderfall einbauen, dass der String "<START>" bzw. "<ENDE>" über eine Sektorgrenze geht. Das wird noch aufwändig![]()






Zitieren

Lesezeichen