qbaj Napisano Styczeń 2, 2011 Udostępnij Napisano Styczeń 2, 2011 hey mam pic16 ktory zapisuje/odczytuje dane z karty sd, jak te dane zapisac/odczytac w pc ?? chodzi o odczyt/zapis sektorow, bez systemu FAT/FAT32/NTFS z odczytem sobie poradzilem (Matlab) SD = fopen('\\.\G:','r') % tworzenie uchwytu "pliku" do odczytu, uchwytu do fizycznego dysku dane=fread(SD, 16); % odczyt 16 bajtow fclose(SD); % zamkniecie "pliku" natomiast jak zapisac cos w sektorach ?? SD = fopen('\\.\G:','w') % nie dziala, zwraca blad:Invalid argument fwrite(SD,dane) fclose(SD); SD = fopen('\\.\G:','r+') % nie dziala, brak bledu ale nie ma efektow na karcie sd fwrite(SD,dane) fclose(SD); prosze o wskazowki 🙂 z gory dziekuje Link do komentarza Share on other sites More sharing options...
wsowa Styczeń 2, 2011 Udostępnij Styczeń 2, 2011 spróbuj open i write i close zamist fopen fclose i fwrite. Na linuksie mogloby wygladac to tak: int sd = open("/dev/sdb", O_APPEND); write(sd, buff, sizeof(buff)); close(sd); poszukaj odpowiednich wywołań systemowych pod windowsem. p.s. literka A... literka G... Link do komentarza Share on other sites More sharing options...
qbaj Styczeń 3, 2011 Autor tematu Udostępnij Styczeń 3, 2011 probowalem uzyc plikow tymczasowych, konsoli i komendy dd D:\acclog\reader>dd if=\\.\G: of=temp.txt count=1 1+0 records in 1+0 records out D:\acclog\reader>dd if=temp.txt of=\\.\G: dd: \\.\G:: Invalid argument i tez lipa :| 1 komenda prawidlowo dziala !! w pliku jest odczytany 1 sektor, natomiast zapis nie dziala 🙁 jakis pomysl ?? p.s. literka H ... jak AGH 😃 Link do komentarza Share on other sites More sharing options...
wsowa Styczeń 3, 2011 Udostępnij Styczeń 3, 2011 Pomysł jest taki, że musisz zapisywać jednocześnie ilości danych będące wielokrotnością rozmiaru sektora. Obczaj tutaj: http://support.microsoft.com/kb/100027 i daj znać czy coś pomogło. Spróbuj napisać jakiś mały program w C, który wywoła CreateFile() z tymi flagami o których piszą w powyższym artykule i koniecznie zapisuj całe sektory danych. [ Dodano: 03-01-2011, 21:55 ] Tutaj gość ma podobny problem: http://www.eggheadcafe.com/software/aspnet/31520519/direct-disk-access-write-to-system-areas.aspx 1 Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Produkcja i montaż PCB - wybierz sprawdzone PCBWay! • Darmowe płytki dla studentów i projektów non-profit • Tylko 5$ za 10 prototypów PCB w 24 godziny • Usługa projektowania PCB na zlecenie • Montaż PCB od 30$ + bezpłatna dostawa i szablony • Darmowe narzędzie do podglądu plików Gerber Zobacz również » Film z fabryki PCBWay
qbaj Styczeń 4, 2011 Autor tematu Udostępnij Styczeń 4, 2011 rozwiazanie w Matlabie: dane(512) % DANE MUSZA BYC WIELOKROTNOSCIA SEKTORA, MIN. 512b SD = fopen('\\.\G:','r+') fwrite(SD,dane); fclose(SD); inne rozwiazania w C za pomoca CreateFile tez dzialaja Link do komentarza Share on other sites More sharing options...
wsowa Styczeń 4, 2011 Udostępnij Styczeń 4, 2011 Ciesze się, że udało mi się pomóc, ale przyznać muszę, że sam nie miałem pojęcia w czym problem, natomiast rozwiązanie wydaje się całkiem sensowne. Dziwne tylko że odczyt nie failuje tylko dociąga do pełnego sektora. Nie polegałbym raczej na tym, że sektor ma zawsze 512b. zmienisz kartę na inną i się okaże że sektory są po 1024k i będzie kicha. Lepiej programowo sprawdzić jaki duży jest sektor: Call DeviceIoControl() using IOCTL_DISK_GET_DRIVE_GEOMETRY to get the bytes per sector, number of sectors, sectors per track, and so forth, so that you can compute the size of the buffer that you will need. Kto jest boski?! Samogłoski! 🙂 Ach te "stare czasy" Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Bądź aktywny - zaloguj się lub utwórz konto!
Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony
Utwórz konto w ~20 sekund!
Zarejestruj nowe konto, to proste!
Zarejestruj się »Zaloguj się
Posiadasz własne konto? Użyj go!
Zaloguj się »