logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[mega128] [BASCOM] avr-dos i problem z zapisem danych

thorin00 29 Gru 2008 18:13 3098 7
REKLAMA
  • #1 5919481
    thorin00
    Poziom 14  
    witam

    zaczynam zabawę z obsługą kart SD i mam problem. używając poniższego kodu (oczywiście biblioteki Config_MMC.bas CONFIG_AVR-DOS.Bas są dołączone)

    
    Dim S As String * 30 
    S = "czterdziesci osiem"
    Open "test.txt" For Append As #1
    Write #1 , S
    Close #1
    


    lub

    
    Dim S As String * 30 
    S = "czterdziesci osiem"
    Open "test.txt" For Output As #1
    Write #1 , S
    Close #1
    


    Jeżeli pliku nie ma na karcie zostanie on automatycznie utworzony jednak zmienna nie zostaje zapisana do pliku, jeżeli plik utworze na kompie sytuacja jest taka sama, natomiast jeżeli do pliku wpisze cokolwiek na poziomie kompa następnie przełoże kartę do atmegi dane ze zmiennej zostaną zapisane. ćo może być przyczyną takiej sytuacji? może plik przed zapisem trzeba jakoś zainicjować?
    ps. Założeniem tego projektu jest logger gps chciałbym aby każdego dnia system tworzył nowy plik z danymi gps, następnie przełożyć kartę do kompa i przekopiować interesujący mnie dzień.

    z góry dziękuję za pomoc
    pozdrawiam
  • REKLAMA
  • #2 5927273
    asembler
    Poziom 32  
    Nie wiem czy akutat tu zadziala ale w innych jezykach aby powstal ślad na dysku nalezy uzyc komendy WRITELN W dzialaniu na file of text.
  • REKLAMA
  • #3 5937672
    Konto nie istnieje
    Poziom 1  
  • #4 5939129
    thorin00
    Poziom 14  
    witam

    niestety polecenia WRITELN nie mogę użyć.

    co do INITFILESYSTEM, to inicjuje system plików. zauważyłem jeszcze jedno jeżeli najpierw zapisuje dane do pliku binarnie za pomocą PUT a następnie do innego pliku dane juz za pomocą WRITE to: zostanie utworzony plik test.bin jednak nic w nim nie ma natomiast w pozostałych plikach (według kodu poniżej) dane zostają zapisane, i pojawia sie kolejny problem po zresetowaniu mikrokontrolera (lub wyłączeniu i włączeniu zasilania) wyskakuje błąd 17 (Sektor zerowy karty nie jest sektorem MBR), pliki są jednak widoczne jeżeli podłącze kartę do PC.
    używam systemu plików FAT ( przy systemie plików FAT32 karta nie jest później widoczna przez PC-wyskakuje komunikat że karta nie jest sformatowana).

    załączam pełny kod programu.

    
    $regfile = "m128def.dat"
    $crystal = 7372800
    $include  "Config_MMC.bas"
    $include "CONFIG_AVR-DOS.Bas"
    
    
    Config Lcdpin = Pin , Db4 = Porta.3 , Db5 = Porta.2 , Db6 = Porta.1 , Db7 = Porta.0 , E = Porta.4 , Rs = Porta.5
    Config Lcd = 16 * 2
    Config Date = Dmy , Separator = .
    Config Clock = Soft
    Enable Interrupts
    
    Time$ = "15:00:00" : Date$ = "02.01.09"
    
    Cls
    Dim Info As Byte
    Info = Initfilesystem(1)
    If Info > 0 Then
    Lcd "ERROR: " ; Info
    Else
    Lcd "SIZE: " ; Disksize()
    Lowerline
    Lcd "FREE: " ; Diskfree()
    End If
    Wait 1
    
    Dim S As String * 30
    
    '----------------------------------------------------------------------------------------------
    
    
    Dim B As Byte , W As Word , L As Long , Sn As Single , Ltemp As Long
    Dim Stxt As String * 10
    B = 1 : W = 50000 : L = 12345678 : Sn = 123.45 : Stxt = "test"
    Open "test.bin" For Binary As #1
    Put #1 , B
    Put #1 , W
    Put #1 , L
    Ltemp = Loc(#1) + 1
    Print Ltemp ; " LOC"
    Print Seek(#1) ; " = LOC+1"
    Print "Długość pliku " ; Lof(#1)
    Print "Tryb dostępu  " ; Fileattr(#1)
    Put #1 , Sn
    Put #1 , Stxt
    Flush #1
    Close #1
    
    '-----------------------------------------------------------------------------------------------
    
    S = "czterdziesci osiem"
    Open "test.txt" For Output As #1
    Write #1 , S
    Close #1
    
    '-----------------------------------------------------------------------------------------------
    
    S = "co to jest"
    Open "test1.txt" For Append As #1
    Write #1 , S
    Close #1
    
    '-----------------------------------------------------------------------------------------------
    
    Cls
    Lcd "OK"
    Do
    Loop
    End
    
  • #5 5947295
    asembler
    Poziom 32  
    atom1477 napisał:
    asembler napisał:
    Nie wiem czy akutat tu zadziala ale w innych jezykach aby powstal ślad na dysku nalezy uzyc komendy WRITELN W dzialaniu na file of text.


    A co to ma do rzeczy? Writeln zrobi po prostu nowa linię. Bez tego powinno dopisać w tej samej linii.

    Na moje oko nie wywołujesz procedury INITFILESYSTEM.
    Pewnie przy dopisywaniu do istniejącego pliku jest ona wywoływana automatycznie i dlatego ten fragment kodu działa.


    jak moze zapisac w tej samej linii skoro jej nie ma??
  • REKLAMA
  • #6 5950554
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #7 5950609
    asembler
    Poziom 32  
    Mnie sie wydale ze linia istnieje dopiero gdy jest zakonczona znacznikiem konca lini LF,CR
    wiec dopoki poraz pierwszy nie wykonamy zapisu linii za pomoca writeln nie zostanie ona utworzona.
    Instrukcja write natomiast mozemy zmienic zawartosc linii. Przynajmniej opieram sie na TRUBO PASCALU.
  • #8 5950789
    Konto nie istnieje
    Poziom 1  
REKLAMA