AVR-DOS Seek ?
AVR-DOS Seek ?
Sziasztok. SD kártyát kezelek az AVR-DOS-al, és minden rendben működik vele, kivéve a seek parancsot. Ha seek-el vagy loc-al kiolvasom a file pointer aktuális értékét akkor az hibátlanul mutatja is azt, ahogy olvasok megfelelően növekszik, de ha a seek-el megpróbálom mondjuk a file elejére állítani akkor nem történik semmi. Érdekes módon ha mondjuk 0-ra állítom és utána kiolvasom a seek-el akkor írja hogy nulla, de ha megpróbálom a fájlt olvasni akár get-el, input-al akkor nem olvas a file elejéről. Találkoztatok már ilyen hibával ? Ha bezárom a fáljt és újra nyitom akkor természetesen hibátlanul megy újra amíg el nem éri a file végét.
Hali Valaki - Mindenki!
AVR-DOS
A fenti Seek problémára még mindég nem tudtok megoldást?

AVR-DOS
A fenti Seek problémára még mindég nem tudtok megoldást?
Kód: Egész kijelölése
Ltemp = Seek(#10) ' Kezdő pozició tárolása
...
Line Input #10 , Temps ' Sorok beolvasása
...
' ha File vége
Seek #10 , Ltemp ' File 4. sorára pozicionál
Print "doserror: " ; Gbdoserror
doserror: 98 fájlelérés hibaBeraktam a fájl végére +1 sort.
Így nem olvasom végig a fájlt, tehát nemjön EOF jel.
De a hiba ugyanaz!
Csak 1*es buffert használok a kevés SRAM miatt!
Lehet ez az oka?

Így nem olvasom végig a fájlt, tehát nemjön EOF jel.
De a hiba ugyanaz!
Csak 1*es buffert használok a kevés SRAM miatt!
Lehet ez az oka?
Kód: Egész kijelölése
' > Kezelése FAT-puffer SRAM:
' > 0 = FAT-és DIR-puffer kezelik egy SRAM puffer 561 bájt
' > 1 = FAT-és DIR-puffer kezelik külön SRAM buffer a 1078 bájt
' > 1. paraméter növekvő sebessége file-kezelés
Const Csepfathandle = 0 ' [default = 1]
Maradt a legrosszabb lehetőség!
Bezárni a Fájlt, és újranyitni az elejétől.
(Így viszont nagyon lassú az ismétlés!)
Pedig én csak a 4. sortól akartam ismételni.

Még csak az elején vagyok a gyakorlatoknak!
De már szerintem a „KokkeKat_FAT_SD_lib” jóval gyorsabb az „AVR-DOS”-nál.

„A Seek - ha jól emlékszem - Byte szintű pozícionálást tud, nem sorszintűt.”
Sajnos még a Byte ként i olvasást sem sikerült megoldanom!
Ott is a pozicionálás rejtelmére nem találom a megoldást!
Nem tudsz rá példát mutatni?

Bezárni a Fájlt, és újranyitni az elejétől.
(Így viszont nagyon lassú az ismétlés!)
Pedig én csak a 4. sortól akartam ismételni.
Még csak az elején vagyok a gyakorlatoknak!
De már szerintem a „KokkeKat_FAT_SD_lib” jóval gyorsabb az „AVR-DOS”-nál.
„A Seek - ha jól emlékszem - Byte szintű pozícionálást tud, nem sorszintűt.”
Sajnos még a Byte ként i olvasást sem sikerült megoldanom!
Ott is a pozicionálás rejtelmére nem találom a megoldást!
Nem tudsz rá példát mutatni?
Ha valaki már járt úgy, mint én, hogy sokat szívott a HW. SPI-vel!
És nem értette az okát. Annak óloztam ide, mint lényegeges új infót!
Az „AVR-DOS comfig_mmc.bas” –ból.
Miszerint ha nem az SS kimenetet használjuk CS.-nek, akkor ís kimenetnek kel állítani!
Különben Slave-ként Működik az SPI!
Három nyelvre is le van fordítva, mivel nem akartam elhinni az első szóra!

És nem értette az okát. Annak óloztam ide, mint lényegeges új infót!
Az „AVR-DOS comfig_mmc.bas” –ból.
Miszerint ha nem az SS kimenetet használjuk CS.-nek, akkor ís kimenetnek kel állítani!
Különben Slave-ként Működik az SPI!
Kód: Egész kijelölése
' M128 SPI init
' define Chip-Select Pin
' ->
' -> Dieser Pin wird für Chip-Select benutzt.
' > Ezt a PIN-kódot használni chipet válassza ki.
Config Portb.0 = Output ' define here Pin for CS of MMC/SD Card
Mmc_cs Alias Portb.0
' Define here SS Pin of HW-SPI of the CPU (f.e. Pinb.0 on M128)
' If an other Pin than SS is used for MMC_SS, SS must be set to OUTPUT and high for proper work of SPI
' otherwise AVR starts SPI-SLAVE if SS-Pin is INPUT and goes to LOW
' > Határozza meg itt SS Pin a HW-SPI a CPU (pl. Pinb.0 az M128)
' > Ha egy másik Pin, mint SS használják MMC_SS, SS-ra kell állítani OUTPUT és a magas megfelelő munka SPI
' > egyébként AVR kezdődik SPI-SLAVE, ha SS-Pin is INPUT, és megy a LOW
' ->
' -> Hier muss der SS-Pin des Hardware-SPI angegeben werden. (Auch wenn ein anderer Pin für Chip-Select benutzt wird.)
' -> Dieser muss als Ausgang konfiguriert sein und auf 1 gehalten werden, da sonst automatisch der SPI-Slave-Modus aktiviert wird.
' > Itt az SS pin az SPI hardveres lehet megadni. (Még ha egy másik érintkező chip válassza ki kell használni.)
' > Ezt kell beállítani, mint egy kimeneti és lehet tartani az 1, ellenkező esetben az automatikus SPI szolga mód.
Config Portb.0 = Output ' define here Pin of SPI SS
Spi_ss Alias Portb.0
Set Spi_ss ' Set SPI-SS to Output and High por Proper work of
#endif ' SPI as Master
'...............................................................................
' HW-SPI is configured to highest Speed
Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = High , Phase = 1 , Clockrate = 4 , Noss = 1
' Spsr = 1 ' Double speed on ATMega128
Spiinit ' Init SPI
Ha már megírtam közben a hibakeresőt használjátok egészséggel!
Persze nem Mega32-esbe való!

Feltételezve, hogy a fájl megnyitás már működik! Mert az egy előző téma lenne.
Persze nem Mega32-esbe való!
Kód: Egész kijelölése
' My_Seek.bas
' AVR-DOS Seek Comand Function. Error kereséshez!
' By: Kapu48 2011. 08.
$regfile = "M128def.dat"
$crystal = 11059200 ' Táp fesz: 3.3V
'$crystal = 16000000 ' Táp fesz: 5V
'$regfile = "m64def.dat"
'$crystal = 14746000
'$regfile = "m32def.dat"
'$crystal = 16000000
$baud = 19200
' Szükség van nagyobb halomra!
$hwstack = 140
$swstack = 140
$framesize = 140
' Feltételes Fordító beállítások:
' Chip Select a Config_MMC-nek
'Const Loadchip = 32 ' ATMega32
'Const Loadchip = 644 ' ATMega644
'Const Loadchip = 64 ' ATMega64
Const Loadchip = 128 ' ATMega128
' Bemenő adatok:
' Bseektoken = 1 File pozíció olvasása
' Bseektoken = 2 File pozíció beállítása
' L_seek = a kivánt file pozíció megadása (Long)
' FMy_seek Visszatér a jelenlegi file pozícióval
Declare Function Fmy_seek(byval Bseektoken As Byte , Byval L_seek As Long) As Long
' Fmy_seek Változók
Dim Lmy_seek As Long , Llong1 As Long , Llong2 As Long , Bseek_token As Byte , Bseek_error As Byte
Dim Bfileattribut As Byte
' Config_MMC integrálja
' SPI Csapokat ebben a fájlban kell igazítani!
$include "M64_Config_MMC.bas"
' Config_AVR-DOS integrálja
' Buffer mérete, száma file kezeli, stb, kell párosítani ezt a fájlt!
$include "Config_AVR-DOS.BAS"
Dim Ssor As String * 100
Bseek_error = 0
Open "Teszt.txt" For Binary As #10
' File pozíció lekérdezés
'LMy_seek = 0
'BSeek_token = 1
Line Input #10 , Ssor ' 1 sor beolvasása
Lmy_seek = Fmy_seek(1 , 0) ' File pozíció megjegyzése
If Bseek_error = 0 Then
Print "1 Jelenlegi file poz: " ; Lmy_seek
Else
Print "R Seek_error: " ; Bseek_error
End If
Line Input #10 , Ssor ' Következő sor beolvasása
' File pozíció beállítása
'BSeek_token = 2
'LMy_seek = LMy_seek
Lmy_seek = Fmy_seek(2 , Lmy_seek) ' Vissza az előzőleg olvasott File pozícióba
If Bseek_error = 0 Then
Print "2 Jelenlegi file poz: " ; Lmy_seek
Else
Print "Set Seek_error: " ; Bseek_error
End If
End 'end program
' Bemenő adatok:
' Bseektoken = 1 File pozíció olvasása
' Bseektoken = 2 File pozíció beállítása
' L_seek = a kívánt file pozíció megadása (Long)
' FMy_seek: Visszatér a jelenlegi file pozícióval
' Bseek_error = Seek Error code
Function Fmy_seek(byval Bseektoken As Byte , Byval L_seek As Long) As Long
Llong1 = Filelen() ' Jelenlegi File hossza
If L_seek <= Llong1 Then ' Ha még a File hosszon belül vagyunk?
Select Case Bseektoken
Case 1 :
Llong2 = Seek(#10)
If Gbdoserror = 0 Then
Print "Seek Read: " ; Llong2
Bseek_error = 0 ' 0 No error
Fmy_seek = Llong2
Else
Print "Seek Read Error: " ; Gbdoserror
Bseek_error = 1 ' 1 olvasás error
End If
Case 2 :
Bfileattribut = Fileattr(#10)
If Bfileattribut = 32 Then
Seek #10 , L_seek
If Gbdoserror <> 0 Then
Print "Seek Set Error: " ; Gbdoserror
Bseek_error = 2 ' 2 Pozicionálás error
Else
Llong2 = Seek(#10)
If Gbdoserror = 0 Then
If L_seek <> Llong2 Then
Print "Seek Set <> Error: "
Bseek_error = 2 ' 2 Pozicionálás error
Else
Print "Seek OK: " ; Llong2
Bseek_error = 0 ' 0 No error
Fmy_seek = Llong2
End If
Else
Print "Seek Poz. Error: " ; Gbdoserror
Bseek_error = 1 ' 1 olvasás error
End If
End If
Else
Print "Seek Set:Nem Binary File Error!"
Bseek_error = 4 ' 4 Csak Binary Filere működik a Seek Set!
End If
Case Else :
Print "Parameter Error 1 or 2 !"
Bseek_error = 3 ' 3 Paraméter error
End Select
Else
Print "Nagy Pozicio. Error !"
Bseek_error = 5 ' 5 Tul nagy pozicio Paraméter error
End If
End Function
'
Feltételezve, hogy a fájl megnyitás már működik! Mert az egy előző téma lenne.