TinyFATFS ..?

P

picnoobie

Guest
Does any1 cố TinyFAT từ http://elm-chan.org/fsw/ff/00index_e.html
trên một Pic.

Tôi quản lý để đọc / ghi ngành, nhưng không thể ra
làm thế nào để làm cho các công trình hệ thống tập tin.
Tôi đang sử dụng định dạng fat16 Sandisk 256MB.
Tôi chỉ muốn đọc / ghi một tập tin văn bản

Tôi đang sử dụng bản MPLab7.52 sinh viên C30.

cảm ơn.

 
Tôi đang làm cho một số tiến bộ tôi là bây giờ có thể
để tạo ra các thư mục được xem như là thư mục trong WinXP.
Tôi bây giờ đang cố gắng tạo ra file văn bản có sản phẩm nào, nhưng
không có may mắn được nêu ra, sau đó sẽ thử nếu tôi có thể đọc nó.

 
Great work anh em!Bạn có thể chia sẻ với chúng tôi?
Vi điều khiển được sử dụng là gì bây giờ?Theo bạn thấy phiền hà trong tuyên bố lớn các biến bằng cách sử dụng ngăn xếp mplab C18 trình biên dịch?

Gorkin ...

 
Nó không phải những gì có vẻ như:

kiểm tra đăng bài của tôi ở đây http://forum.microchip.com/tm.aspx?m=243523

nó trong tiến trình atleast nhưng chắc chắn tôi biết rằng một phần của lib này là làm việc tức là làm cho thư mục, đó là lý do tại sao tôi được đăng ở đây hy vọng sẽ giúp tôi có được.

 
cập nhật ...

Tôi tìm thấy nguồn gốc của vấn đề, tôi không biết nhưng các
Tầm quan trọng của những gì tôi đã thực hiện, ngoài việc cho phép tôi để tạo ra một thư mục, và các tập tin txt.
Tôi có thể, hiện nay, tạo ra một thư mục trong một thư mục, và một tập tin bên trong một thư mục.

để làm: đọc txt, thực hiện một giao diện lệnh đơn giản.

Đây là trình điều khiển mmc, giống như những gì tôi đã được đăng tại diễn đàn uChip:Mã số:# include <p24HJ128GP510.h>

/ / # include "delay.h"

# include "diskio.h"/ / extern void in (char * str); / / Hiển đến lcd

/ / extern void cls (); / / rõ ràng lcd

/ / extern void lcd_gotoxy (uint8 x, uint8 y); / / goto LCD cột / dòng/ * MMC / SD lệnh (trong SPI) * /

# define CMD0 (0x40 0) / * GO_IDLE_STATE * /

# define cmd1 (0x40 1) / * SEND_OP_COND * /

# define CMD8 (0x40 8) / * SEND_IF_COND * /

# define CMD9 (0x40 9) / * SEND_CSD * /

# define CMD10 (0x40 10) / * SEND_CID * /

# define CMD12 (0x40 12) / * STOP_TRANSMISSION * /

# define CMD16 (0x40 16) / * SET_BLOCKLEN * /

# define CMD17 (0x40 17) / * READ_SINGLE_BLOCK * /

# define CMD18 (0x40 18) / * READ_MULTIPLE_BLOCK * /

# define CMD24 (0x40 24) / * WRITE_BLOCK * /

# define CMD25 (0x40 25) / * WRITE_MULTIPLE_BLOCK * /

# define CMD41 (0x40 41) / * SEND_OP_COND (ACMD) * /

# define CMD55 (0x40 55) / * APP_CMD * /

# define CMD58 (0x40 58) / * READ_OCR * // * Kiểm soát tín hiệu (Platform phụ thuộc) * /

/ / # define CS _LATA4

# define SELECT () Lata & = ~ 16 / * MMC CS = L * /

# define bỏ chọn () Lata | = 16 / * MMC CS = H * /

# define SOCKPORT PORTA / * Socket liên hệ với cảng * /

# define SOCKWP PORTAbits.RA0 / * Viết bảo vệ chuyển (PB5) * /

# define SOCKINS PORTAbits.RA1 / * Thẻ phát hiện chuyển đổi (PB4) * /

/ / # define isWriteProtect () (PORTAbits.RA0 & 0x01) / / _RA1 / * Viết bảo vệ chuyển (PB5) * /

/ / # define isCardDetect () (PORTAbits.RA1 & 0x01) / / _RA0 / * Thẻ phát hiện chuyển đổi (PB4) * /

/ / # define WPTRIS TRISAbits.TRISA0

/ / # define INTRIS TRISAbits.TRISA1tĩnh dễ bay hơi

DSTATUS Stat = STA_NOINIT; / * đĩa trạng thái * /tĩnh dễ bay hơi

BYTE Timer1, Timer2; / * 100Hz giảm giờ * /tĩnh

BYTE BlkAddr; / * 0: Byte địa chỉ, 1: Khối địa chỉ * // / void cfgSPI1Master (void);

/ / BYTE wp, cd;void cfgSpi1Master (void)

(

/ / SPI1CON1 Đăng ký Settings

SPI1CON1bits.DISSCK = 0; / / Internal Serial Clock là Enabled.

SPI1CON1bits.DISSDO = 0; / / pin SDOx được điều khiển bởi module.

SPI1CON1bits.SSEN = 0; / / SS pin không được sử dụng

SPI1CON1bits.MODE16 = 0; / / Giao tiếp là byte-rộng (8 bit).

SPI1CON1bits.SMP = 0; / / Input Dữ liệu được lấy mẫu ở giữa dữ liệu đầu ra thời gian.

SPI1CON1bits.CKE = 1; / / Serial lượng dữ liệu thay đổi về chuyển tiếp từ tiểu bang Idle đồng hồ để nhà nước đồng hồ đang hoạt động

SPI1CON1bits.CKP = 0; / / Idle nhà nước đối với đồng hồ là một mức thấp; hoạt động nhà nước là một trình độ cao

SPI1CON1bits.MSTEN = 1; / / Master Mode BậtSPI1CON1bits.SPRE2 = 1; / / 02:01 Fcy = 40MHz 312KHz

SPI1CON1bits.SPRE1 = 1;

SPI1CON1bits.SPRE0 = 0;SPI1CON1bits.PPRE1 = 0; / / 64:1

SPI1CON1bits.PPRE0 = 0;/ / SPI1CON2 Đăng ký SettingsSPI1CON2bits.FRMEN = 0; / / Khung Chế độ tàn tật

SPI1CON2bits.SPIFSD = 0; / / Frame đồng bộ xung đầu ra (master)

SPI1CON2bits.FRMPOL = 0; / / xung đồng bộ khung đang hoạt động thấp

/ / SPI1CON2bits.FRMDLY = 0; / / xung Khung đồng bộ đến trước đồng hồ bit đầu tiên

/ / SPI1CON2bits.ENHBUF = 0; / / FIFO đệm bị vô hiệu hoá/ / SPI1STAT Đăng ký SettingsSPI1STATbits.SPISIDL = 0; / / Tiếp tục hoạt động mô-đun trong chế độ Idle

SPI1STATbits.BUFELM = 0; / / Buffer Dài = 1 Word

SPI1STATbits.SPIROV = 0; / / Không Overflow Nhận Đã Xuất Hiện

SPI1STATbits.SPIEN = 1; / / Enable SPI Module/ / Interrupt Controller Settings

IFS0bits.SPI1IF = 0; / / Clear SPI1 Interrupt Cờ

IEC0bits.SPI1IE = 1; / / Enable Interrupt SPI1)/*================================================ =============================

Dịch vụ gián đoạn công việc.

================================================== ===========================*/

void __attribute__ ((__interrupt__)) _SPI1Interrupt (void)

(

IFS0bits.SPI1IF = 0;

)/ ** /

int SPI1_Read (void)

(

SPI1BUF = 0xFF; / / nếu SPI1BUF = 0x00; như nó đã ở lib spi nó doesn 'làm việc

trong khi (SPI1STATbits.SPIRBF);

SPI1STATbits.SPIROV = 0;

nếu (SPI1CON1bits.MODE16) (

SPI1BUF trở lại;

) else (

trở lại SPI1BUF &0xff;

))

/ ** /

void SPI1_Write (int dữ liệu)

(

nếu (SPI1CON1bits.MODE16) (

SPI1BUF = dữ liệu;

) else (

SPI1BUF = dữ liệu &0xff;

)

trong khi (SPI1STATbits.SPITBF);

dữ liệu = SPI1BUF;

)
/*------------------------------------------------ -----------------------*/

/ * Chờ cho thẻ đã sẵn sàng * /

/*------------------------------------------------ -----------------------*/tĩnh

BYTE wait_ready (void)

(

BYTE res;Timer2 = 50; / * Chờ sẵn sàng trong thời gian chờ của 500ms * /

SPI1_Read ();

làm

res = SPI1_Read ();

trong khi ((res = 0xFF!) & & Timer2);

return res;

)/ ** /

void CloseSPI1 (void)

(

/ / SELECT (); / * Chờ cho thẻ đã sẵn sàng * /

/ / wait_ready ();

/ / Bỏ chọn ();

/ / SPI1_Read ();

/ / Vô hiệu hoá các bit Interrupt trong Đăng ký Interrupt Enable Control

IEC0bits.SPI1IE = 0;/ / Vô hiệu hoá các phân hệ.
Tất cả ghim kiểm soát bởi Port Chức năng

SPI1STATbits.SPIEN = 0;/ / Vô hiệu hoá cờ Interrupt bit trong các đăng ký Interrupt Cờ Control

IFS0bits.SPI1IF = 0;/ / Stat | = STA_NOINIT; / * Set STA_NOINIT * /)/*------------------------------------------------ -----------------------*/

/ * Nhận được một gói dữ liệu từ MMC * /

/*------------------------------------------------ -----------------------*/tĩnh

BOOL rcvr_datablock (

BYTE * buff, / * Dữ liệu đệm để lưu trữ dữ liệu nhận được * /

uint16 BTR / * Byte count (phải được thậm chí số) * /

)

(

BYTE token;Timer1 = 10;

do (/ * Chờ cho dữ liệu gói trong thời gian chờ của 100ms * /

token = SPI1_Read ();

) While ((token == 0xFF) & & Timer1);

if (token = 0xFE!) return FALSE; / * Nếu không hợp lệ dữ liệu thẻ, retutn với lỗi * /do (/ * Nhận khối dữ liệu vào bộ đệm * /

* buff = SPI1_Read ();

* buff = SPI1_Read ();

) Trong khi (BTR -= 2);

SPI1_Read (); / * Huỷ CRC * /

SPI1_Read ();break; / * Trở lại với sự thành công * /

)
/*------------------------------------------------ -----------------------*/

/ * Gửi dữ liệu gói để MMC * /

/*------------------------------------------------ -----------------------*/# nếu _READONLY == 0

tĩnh

BOOL xmit_datablock (

const BYTE * buff, / * 512 byte khối dữ liệu được truyền đi * /

BYTE token / * Dữ liệu / Stop token * /

)

(

BYTE resp, wc;nếu (wait_ready () = 0xFF!) return FALSE;SPI1_Write (token); / * Xmit dữ liệu token * /

if (token = 0xFD!) (/ * Dữ liệu token * /

wc = 0;

do (/ * Xmit các khối 512 byte dữ liệu để MMC * /

SPI1_Write (* buff );

SPI1_Write (* buff );

) Trong khi (- wc);

SPI1_Write (0xFF); / * CRC (Dummy) * /

SPI1_Write (0xFF);

/ / resp = SPI1_Read (); / * Reveive dữ liệu ứng * //************************************************* *******************************

Đây là một phần đó là gây ra sự cố

Tôi không biết nhưng những nhược điểm của nó là những gì cho ý kiến

nhưng nó hoạt động cho bây giờ.

************************************************** ******************************/

SPI1_Read ();/ / if ((resp & 0x1F) = 0x05!) / * Nếu không được chấp nhận, trả lại với lỗi * /

/ / (

/ / _LATD0 = 1; / / debug

/ / Return FALSE;

/ /)

)break;

)

# endif / * _READONLY * //*------------------------------------------------ -----------------------*/

/ * Gửi một gói lệnh để MMC * /

/*------------------------------------------------ -----------------------*/tĩnh

BYTE send_cmd (

BYTE cmd, / * lệnh byte * /

DWORD arg / * Đối số * /

)

(

BYTE n, res;nếu (wait_ready () = 0xFF!) trả lại 0xFF;/ * Gửi gói lệnh * /

SPI1_Write (cmd); / * lệnh * /

SPI1_Write ((BYTE) (arg>> 24)); / * Đối số [31 .. 24] * /

SPI1_Write ((BYTE) (arg>> 16)); / * Đối số [23 .. 16] * /

SPI1_Write ((BYTE) (arg>> 8)); / * Đối số [15 .. 8] * /

SPI1_Write ((BYTE) arg); / * Đối số [7 .. 0] * /

n = 0;

if (cmd == CMD0) n = 0x95; / * CRC cho CMD0 (0) * /

if (cmd == CMD8) n = 0x87; / * CRC cho CMD8 (0x1AA) * /

SPI1_Write (n);/ * Nhận lệnh ứng * /

if (cmd == CMD12) SPI1_Read (); / * Bỏ qua một byte cụ khi ngừng đọc * /

n = 10; / * Chờ một phản ứng hợp lệ trong thời gian chờ của 10 số * /

làm

res = SPI1_Read ();

trong khi ((res & 0x80) & & - n);return res; / * Trở lại với giá trị phản ứng * /

)/ *

tĩnh

int chk_power (void)

(

trở lại (porte & 0x80)?
0: 1;

)

* /

/*------------------------------------------------ -----------------------*/

/ * Công Chức năng * //*-----------------------*/

/ * Initialize Disk Drive * /

/ * (Platform phụ thuộc) * /

DSTATUS disk_initialize (

BYTE DRV / * Vật lý ổ nmuber (0) * /

)

(

BYTE n, e, ocr [4];Bỏ chọn (); / * CS = H * // / bắt đầu với CLK chậm

SPI1CON1bits.SPRE2 = 1; / / 02:01 Fcy = 40MHz doze 01:01 312KHz

SPI1CON1bits.SPRE1 = 1;

SPI1CON1bits.SPRE0 = 0;SPI1CON1bits.PPRE1 = 0; / / 64:1

SPI1CON1bits.PPRE0 = 0;IFS0bits.SPI1IF = 0; / / Clear SPI1 Interrupt Cờ

SPI1STATbits.SPIROV = 0; / / Không Overflow Nhận Đã Xuất Hiện

SPI1STATbits.SPIEN = 1; / / Enable SPI Modulecho (Timer1 = 1; Timer1;); / * Chờ 10ms * // / Done bởi SPI1STAT.SPIEN

/ / TRISFbits.TRISF6 = 0; / / Output RF6/SCK1

/ / TRISFbits.TRISF7 = 1; / / Input RF7/SDI1_E

/ / TRISFbits.TRISF8 = 0; / / Output RF8/SDO1_Enếu (DRV) return STA_NOINIT; / * Hỗ trợ chỉ có ổ đĩa đơn * /

nếu (Stat & STA_NODISK) return Stat; / * Không có thẻ trong socket * /for (n = 10; n; n -) / * 80 dummy đồng hồ * /

SPI1_Read ();SELECT (); / * CS = L * /f = 0;

nếu (send_cmd (CMD0, 0) == 1) (/ * Nhập bang Idle * /

Timer1 = 100; / * khởi timeout của 1000 msec * /nếu (send_cmd (CMD8, 0x1AA) == 1) (/ * SDC Ver2 * /

for (n = 0; n <4; n )

ocr [n] = SPI1_Read ();

nếu (ocr [2] == 0x01 & & ocr [3] == 0xAA) (/ * Các thẻ có thể làm việc tại nhiều VDD của 2,7-3.6V * /

do (

nếu (send_cmd (CMD55, 0) <= 1 & & (CMD41 send_cmd, 1UL <<30) == 0)

break;

) Trong khi (Timer1);

nếu (Timer1 & & (CMD58 send_cmd, 0) == 0) (/ * Kiểm tra CCS bit * /

for (n = 0; n <4; n )

ocr [n] = SPI1_Read ();

f = (ocr [0] & 0x40)?
3: 1;

)

)

) Else (/ * SDC Ver1 hoặc MMC * /

nếu (send_cmd (CMD55, 0) <= 1 & & (CMD41 send_cmd, 0) <= 1) f = 4; / * SDC?
* /

do (

if (! f & & (cmd1 send_cmd, 0) == 0) break; / * cho MMC * /

nếu (f & & (CMD55 send_cmd, 0) <= 1 & & (CMD41 send_cmd, 0) == 0) break; / * cho SDC Ver1 * /

) Trong khi (Timer1);

nếu (Timer1) f = 1;

)

if (f == 1 & & (CMD16 send_cmd, 512) = 0!) / * Chọn R / W khối chiều dài * /

f = 0;

)Bỏ chọn (); / * CS = H * /

SPI1_Read (); / * Idle (Release DO) * /if (e & 1) (/ * khởi succeded * /BlkAddr = (f & 2)?
1: 0; / * Nhận địa chỉ chế độ * /

Stat & = ~ STA_NOINIT; / * Clear STA_NOINIT * /

/ / Stat = 0;

/ / tăng tốc độ spi CLK

SPI1CON1bits.SPRE2 = 1; / / 01:01 Fcy = 40MHz doze 01:01 10MHz

SPI1CON1bits.SPRE1 = 1;

SPI1CON1bits.SPRE0 = 1;SPI1CON1bits.PPRE1 = 1; / / 04:01

SPI1CON1bits.PPRE0 = 0;/ / cls ();

/ / Hiển ( "MMC initialized \ n");

)

khác

(

/ / cls ();

/ / Hiển ( "Not Found"); / / power_off ();

CloseSPI1 ();

)Stat trở lại;

)/*--------------------*/

/ * Trở lại đĩa Tình trạng * /DSTATUS disk_status (

BYTE DRV / * Vật lý ổ nmuber (0) * /

)

(

/ / if (DRV) return STA_NOINIT; / * Hỗ trợ chỉ có ổ đĩa đơn * /

/ / return Stat;

trở lại (DRV)?
STA_NODISK: Stat;

)
/*------------------------------------------------ -----------------------*/

/ * Đọc ngành (s) * /

/*------------------------------------------------ -----------------------*/DRESULT disk_read (

BYTE DRV, / * Vật lý ổ nmuber (0) * /

BYTE * buff, / * Con trỏ đến bộ đệm dữ liệu để lưu trữ dữ liệu đọc * /

DWORD khu vực kinh tế, / * Bắt đầu khu vực kinh tế số (LBA) * /

BYTE đếm / * Ngành đếm (1 .. 255) * /

)

(

nếu (DRV | |! count) return RES_PARERR;

nếu (Stat & STA_NOINIT) return RES_NOTRDY;nếu (BlkAddr)! ngành *= 512; / * Convert to byte địa chỉ nếu cần * /SELECT (); / * CS = L * /if (count == 1) (/ * đơn khối đọc * /

if ((send_cmd (CMD17, khu vực kinh tế) == 0) / * READ_SINGLE_BLOCK * /

& & Rcvr_datablock (buff, 512))

count = 0;

)

else (/ * Nhiều khối đọc * /

nếu (send_cmd (CMD18, khu vực kinh tế) == 0) (/ * READ_MULTIPLE_BLOCK * /

do (

nếu (rcvr_datablock (buff, 512)) break!;

buff = 512;

) While (- count);

send_cmd (CMD12, 0); / * STOP_TRANSMISSION * /

)

)Bỏ chọn (); / * CS = H * /

SPI1_Read (); / * Idle (Release DO) * /return (count RES_ERROR: RES_OK)?;

)
/*------------------------------------------------ -----------------------*/

/ * Viết ngành (s) * /

/*------------------------------------------------ -----------------------*/# nếu _READONLY == 0

DRESULT disk_write (

BYTE DRV, / * Vật lý ổ nmuber (0) * /

const BYTE * buff, / * Con trỏ đến các dữ liệu được ghi * /

DWORD khu vực kinh tế, / * Bắt đầu khu vực kinh tế số (LBA) * /

BYTE đếm / * Ngành đếm (1 .. 255) * /

)

(
nếu (DRV | |! count) return RES_PARERR;

nếu (Stat & STA_PROTECT) return RES_WRPRT;

nếu (Stat & STA_NOINIT) return RES_NOTRDY;nếu (BlkAddr)! ngành *= 512; / * Convert to byte địa chỉ nếu cần * /SELECT (); / * CS = L * /if (count == 1) (/ * Single chặn viết * /

if ((send_cmd (CMD24, khu vực kinh tế) == 0) / * WRITE_BLOCK * /

& & Xmit_datablock (buff, 0xFE))

count = 0;)

else (/ * Nhiều khối viết * /

nếu (send_cmd (CMD25, khu vực kinh tế) == 0) (/ * WRITE_MULTIPLE_BLOCK * /

do (

nếu (xmit_datablock (buff, 0xFC)) break!;

buff = 512;

) While (- count);

nếu (xmit_datablock (! 0, 0xFD)) / * STOP_TRAN token * /

count = 1;

)

)
Bỏ chọn (); / * CS = H * /

SPI1_Read (); / * Idle (Release DO) * /

return (count RES_ERROR: RES_OK)?;

/ / return (count RES_OK: RES_ERROR)?;)

# endif / * _READONLY * /

/*------------------------------------------------ -----------------------*/

/ * Miscellaneous Functions * /

/*------------------------------------------------ -----------------------*/DRESULT disk_ioctl (

BYTE DRV, / * Vật lý ổ nmuber (0) * /

BYTE Ctrl, / * Control mã * /

void * buff / * Buffer để gửi / nhận dữ liệu kiểm soát * /

)

(

DRESULT res;

BYTE n, CSD [16];

WORD csize;nếu (DRV) return RES_PARERR;

nếu (Stat & STA_NOINIT) return RES_NOTRDY;SELECT (); / * CS = L * /res = RES_ERROR;

switch (ctrl) (

trường hợp GET_SECTOR_COUNT: / * Nhận số lĩnh vực trên đĩa (DWORD) * /

if ((send_cmd (CMD9, 0) == 0) & & rcvr_datablock (CSD, 16)) (

n = CSD [0]>> 6;

switch (n) (

case 0: / * CSD ver 1.XX * /

n = (CSD [5] & 15) ((CSD [10] & 128)>> 7) ((CSD [9] & 3) <<1) 2;

csize = (CSD [8]>> 6) ((WORD) CSD [7] <<2) ((WORD) (CSD [6] & 3) <<10) 1;

* (DWORD *) buff = (DWORD) csize <<(n - 9);

res = RES_OK;

break;

trường hợp 1: / * CSD ver 2,00 * /

csize = CSD [9] ((WORD) CSD [8] <<8) 1;

* (DWORD *) buff = (DWORD) csize <<10;

res = RES_OK;

break;

)

)

break;trường hợp GET_SECTOR_SIZE: / * Get lĩnh vực trên đĩa (WORD) * /

* (WORD *) buff = 512;

res = RES_OK;

break;trường hợp CTRL_SYNC: / * Hãy đảm bảo rằng dữ liệu đã được viết * /

nếu (wait_ready () == 0xFF)

res = RES_OK;

break;trường hợp MMC_GET_CSD: / * Nhận CSD như là một khối dữ liệu (16 byte) * /

if ((send_cmd (CMD9, 0) == 0) / * READ_CSD * /

& & Rcvr_datablock (buff, 16 / 2))

res = RES_OK;

break;trường hợp MMC_GET_CID: / * Nhận CID như là một khối dữ liệu (16 byte) * /

if ((send_cmd (CMD10, 0) == 0) / * READ_CID * /

& & Rcvr_datablock (buff, 16 / 2))

res = RES_OK;

break;trường hợp MMC_GET_OCR: / * Nhận OCR như một resp R3 (4 byte) * /

nếu (send_cmd (CMD58, 0) == 0) (/ * READ_OCR * /

for (n = 0; n <4; n )

* ((BYTE *) buff n) = SPI1_Read ();

res = RES_OK;

)

break;mặc định:

res = RES_PARERR;

)Bỏ chọn (); / * CS = H * /

SPI1_Read (); / * Idle (Release DO) * /return res;

)/*---------------------------------------*/

/ * Thiết bị định giờ ngắt thủ tục * /

/ * Này phải được gọi là trong khoảng thời gian 10ms * /

/ * (Platform phụ thuộc) * /void disk_timerproc (void)

(

tĩnh BYTE pv;

BYTE n, s;n = Timer1; / * 100Hz giảm giờ * /

nếu (n) Timer1 = - n;

n = Timer2;

nếu (n) Timer2 = - n;n = pv;

pv = SOCKPORT & (SOCKWP | SOCKINS); / / Mẫu ổ cắm chuyển đổiif (n == pv) (/ / có địa chỉ liên lạc stabled?

s = stat;nếu (pv & SOCKWP) / / WP là H (viết được bảo vệ)

s | = STA_PROTECT;

else / / WP là L (viết bật)

s & = STA_PROTECT ~;nếu (pv & SOCKINS) / / INS = H (Socket trống)s | = (STA_NODISK | STA_NOINIT);

else / / INS = L (Card có)

s & = STA_NODISK ~;Stat = s;

))
 
Chỉ muốn để cho bạn guys biết rằng tôi thành công đọc
một tập tin văn bản.nhưng tôi cant nhận được kích thước tập tin.
Nếu tôi có thể nhận được kích thước tập tin tôi có thể đọc nó từ đầu đến cuối,
ngay bây giờ tôi đã có nó hardcoded chỉ để có được một cái gì đó.heres thử nghiệm chính của tôi:

Mã số:FILINFO finfo;BYTE linebuf [80]; / * Console đệm đầu vào * /FATFS fatfs; / * tập tin hệ thống đối tượng cho mỗi ổ đĩa logic * /BYTE buff [512]; / * Làm việc đệm * /
 
picnoobie đã viết:

Chỉ muốn để cho bạn guys biết rằng tôi thành công đọc

một tập tin văn bản.
nhưng tôi cant nhận được kích thước tập tin.

Nếu tôi có thể nhận được kích thước tập tin tôi có thể đọc nó từ đầu đến cuối,

ngay bây giờ tôi đã có nó hardcoded chỉ để có được một cái gì đó.heres thử nghiệm chính của tôi:Mã số:FILINFO finfo;BYTE linebuf [80]; / * Console đệm đầu vào * /FATFS fatfs; / * tập tin hệ thống đối tượng cho mỗi ổ đĩa logic * /BYTE buff [512]; / * Làm việc đệm * /
 
liên kết vẫn hoạt động trên đây http://elm-chan.org/fsw/ff/00index_e.htmlsửa: Tôi kèm theo nó, chỉ trong trường hợp.
Xin lỗi, nhưng bạn cần phải đăng nhập để xem tập tin đính kèm này

 

Welcome to EDABoard.com

Sponsor

Back
Top