Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[AVR][C] Atmega32 SD card, nadpisywanie pliku

sorex86 28 Gru 2011 20:45 2349 6
  • #1 28 Gru 2011 20:45
    sorex86
    Poziom 15  

    Zainteresowałem sie biblioteką obslugi karty SD ze strony www.dharmanitech.com . Postepujac tak jak autor biblioteki nakazuje. Wykorzystywalem RS232 do obslugi karty SD. Bez problemu przy pomocy podmenu nr 7 moge dodawac kolejne linie tekstu do pliku.

    Jednak gdy wzialem sie za modyfikacje pliku main uzyskalem cos takiego:

    W terminalu mam:

    Kod: bash
    Zaloguj się, aby zobaczyć kod


    Funkcja writeFile w petli While dziala poprawnie tylko za pierwszym razem. Potem tak jakby zmienna fileName przestala istniec.. Jakis pomysl?
    W terminalu wywolujac w kolko ta funkcje wszystko ladnie dziala... a jak ustawie na "sztywno" to juz nie.

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0 6
  • Pomocny post
    #2 28 Gru 2011 21:30
    mickpr
    Poziom 39  

    Witam
    Przyjrzyj się funkcji "convertFileName", tam jest pies pogrzebany.
    Dodaj co najmniej jeden znak ('\n') na końcu - tak wymaga dobry zwyczaj w C :-)

    0
  • #3 28 Gru 2011 22:24
    sorex86
    Poziom 15  

    Kod: c
    Zaloguj się, aby zobaczyć kod



    Faktycznie. Program sie wysypuje przy tej funkcji. Rozumiem, ze funkcja szuka znaku kropki i jezeli znajdzie go na pozycji wyzszej niz 8 to zwraca blad. Nie bierze sie nawet za przepisywanie nazwy. Jak to przeskoczyc? We funkcji writeFile nie widze, zadnego wskanika.

    Dobra,. zachowalem sie jak "prawdziwy programista amator" i zakomentowalem linie:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Teraz dziala ... Rozwiazanie silowe.. Tworzy najpierw plik z roszerzeniem test.txt. Kolejne pomiary dopisuje do pliku test (bez .txt).

    A jak to zrobic poprawnie?

    0
  • Pomocny post
    #4 29 Gru 2011 14:45
    mickpr
    Poziom 39  

    Skoro skonwertował ci nazwę w pierwszym przejściu, to w drugim już jest skonwertowana. Wtedy traktuje ją bez rozszerzenia. Wpisuj nazwę (strcpy_p) z ROM-flash do RAM. Zadeklaruj sobie bufor na nazwe (8 znaków +kropka+3 rozszerzenia+znak końca (\n).

    Dokladnie to jest tak, ze w pierwszym przejsciu masz "TEXT TXT" a w drugim "TEXT "

    0
  • #5 15 Maj 2014 15:11
    bloniak91
    Poziom 8  

    Witam,
    postanowiłem się podpiąć pod temat ponieważ mam podobny błąd. Korzystam z tej samej biblioteki, wszystko działa dobrze, jednak gdy zmodyfikowałem trochę kod do postaci takiej żeby w nieskończonym while(1) program odczytywał plik, otrzymuję podobny błąd: Invalid fileName.. po wykreskowaniu:
    //if(j>8) {transmitString_F(PSTR("Invalid fileName..")); return 1;}
    wywala następny błąd: File does not exist!
    pętla while wygląda następująco:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • #6 16 Maj 2014 21:58
    mickpr
    Poziom 39  

    Po pierwsze:
    brak całego kodu - nie wiadomo:
    - jak (i czy) inicjujesz SPI i FatFs,
    - jaka jest konfiguracja FatFs,
    Piszesz o fragmencie (po wykreskowaniu...) , którego nawet nie podałeś!

    Po drugie:

    bloniak91 napisał:
    po wykreskowaniu
    Zastanawiam się po co "wykreskowujesz" instrukcję zgłaszającą błąd. Błąd wystąpił wcześniej, niezauważanie go nie spowoduje że on zniknie - prawda?
    Jeśli nie masz debugger'a wstaw sobie instrukcje drukujące pomocnicze napisy co linijka, aby dokładnie wskazać nam - gdzie ów błąd powstaje.

    Bez tych informacji możemy równie dobrze spojrzeć w nasze szklane kule i palnąć coś w stylu : RTFM, a chyba nie o to chodzi, prawda? :)

    0
  • #7 19 Maj 2014 15:49
    bloniak91
    Poziom 8  

    Zamieszczam cały main:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    Inicjacja SPI
    Kod: c
    Zaloguj się, aby zobaczyć kod

    oraz
    Kod: c
    Zaloguj się, aby zobaczyć kod

    po wsatwieniu napisów pomocniczych, program raz prawidłowo odczytuje plik, natomiast przy próbie następnego odczytu przechodzi i prawidłowo wyświetla "aaa", dalej wyrzuca File does not exist! i wyświetla bbb...tutaj się zawiesza i koniec.

    Dodano po 5 [godziny]:

    okej, poradziłem sobie,
    zmieniłem główną pętlę na:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    0