亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? tff.i

?? This is the latest VS1053B chip interface routines combined with Elm Chan s FatFs library. Whole cod
?? I
?? 第 1 頁 / 共 5 頁
字號:
} FIL;


/* File status structure */
typedef struct _FILINFO {
	DWORD fsize;			/* Size */
	WORD fdate;				/* Date */
	WORD ftime;				/* Time */
	BYTE fattrib;			/* Attribute */
	char fname[8+1+3+1];	/* Name (8.3 format) */
} FILINFO;


/* File function return code (FRESULT) */

typedef enum {
	FR_OK = 0,			/* 0 */
	FR_NOT_READY,		/* 1 */
	FR_NO_FILE,			/* 2 */
	FR_NO_PATH,			/* 3 */
	FR_INVALID_NAME,	/* 4 */
	FR_INVALID_DRIVE,	/* 5 */
	FR_DENIED,			/* 6 */
	FR_EXIST,			/* 7 */
	FR_RW_ERROR,		/* 8 */
	FR_WRITE_PROTECTED,	/* 9 */
	FR_NOT_ENABLED,		/* 10 */
	FR_NO_FILESYSTEM,	/* 11 */
	FR_INVALID_OBJECT,	/* 12 */
	FR_MKFS_ABORTED		/* 13 (not used) */
} FRESULT;



/*-----------------------------------------------------*/
/* Tiny-FatFs module application interface             */

FRESULT f_mount (BYTE, FATFS*);						/* Mount/Unmount a logical drive */
FRESULT f_open (FIL*, const char*, BYTE);			/* Open or create a file */
FRESULT f_read (FIL*, void*, UINT, UINT*);			/* Read data from a file */
FRESULT f_write (FIL*, const void*, UINT, UINT*);	/* Write data to a file */
FRESULT f_lseek (FIL*, DWORD);						/* Move file pointer of a file object */
FRESULT f_close (FIL*);								/* Close an open file object */
FRESULT f_opendir (DIR*, const char*);				/* Open an existing directory */
FRESULT f_readdir (DIR*, FILINFO*);					/* Read a directory item */
FRESULT f_stat (const char*, FILINFO*);				/* Get file status */
FRESULT f_getfree (const char*, DWORD*, FATFS**);	/* Get number of free clusters on the drive */
FRESULT f_truncate (FIL*);							/* Truncate file */
FRESULT f_sync (FIL*);								/* Flush cached data of a writing file */
FRESULT f_unlink (const char*);						/* Delete an existing file or directory */
FRESULT	f_mkdir (const char*);						/* Create a new directory */
FRESULT f_chmod (const char*, BYTE, BYTE);			/* Change file/dir attriburte */
FRESULT f_utime (const char*, const FILINFO*);		/* Change file/dir timestamp */
FRESULT f_rename (const char*, const char*);		/* Rename/Move a file or directory */
FRESULT f_forward (FIL*, UINT(*)(const BYTE*,UINT), UINT, UINT*);	/* Forward data to the stream */



/* User defined function to give a current time to fatfs module  */

DWORD get_fattime (void);	/* 31-25: Year(0-127 +1980), 24-21: Month(1-12), 20-16: Day(1-31) */
							/* 15-11: Hour(0-23), 10-5: Minute(0-59), 4-0: Second(0-29 *2) */



/* File access control and file status flags (FIL.flag) */



/* FAT sub type (FATFS.fs_type) */



/* File attribute bits for directory entry */




/* Offset of FAT structure members */









/* Multi-byte word access macros  */




/*-----------------------------------------------------------------------
/  Low level disk interface modlue include file  R0.05   (C)ChaN, 2007
/----------------------------------------------------------------------- */











/* Status of Disk Functions */
typedef BYTE	DSTATUS;
typedef BYTE	DSTATUS;
typedef BYTE	DSTATUS;

/* Results of Disk Functions */
typedef enum {
	RES_OK = 0,		/* 0: Successful */
	RES_ERROR,		/* 1: R/W Error */
	RES_WRPRT,		/* 2: Write Protected */
	RES_NOTRDY,		/* 3: Not Ready */
	RES_PARERR		/* 4: Invalid Parameter */
} DRESULT;


/*---------------------------------------*/
/* Prototypes for disk control functions */

DSTATUS disk_initialize (BYTE);
DSTATUS disk_status (BYTE);
DRESULT disk_read (BYTE, BYTE*, DWORD, BYTE);
DRESULT disk_write (BYTE, const BYTE*, DWORD, BYTE);
DRESULT disk_ioctl (BYTE, BYTE, void*);
void	disk_timerproc (void);




/* Disk Status Bits (DSTATUS) */



/* Command code for disk_ioctrl() */

/* Generic command */
/* MMC/SDC command */
/* ATA/CF command */




static
FATFS *FatFs;			/* Pointer to the file system objects (logical drive) */
static
WORD fsid;				/* File system mount ID */


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

  Module Private Functions

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


/*-----------------------------------------------------------------------*/
/* Change window offset                                                  */
/*-----------------------------------------------------------------------*/

static
BOOL move_window (	/* TRUE: successful, FALSE: failed */
	DWORD sector	/* Sector number to make apperance in the FatFs->win */
)					/* Move to zero only writes back dirty window */
{
	DWORD wsect;
	FATFS *fs = FatFs;


	wsect = fs->winsect;
	if (wsect != sector) {	/* Changed current window */
		BYTE n;
		if (fs->winflag) {	/* Write back dirty window if needed */
			if (disk_write(0, fs->win, wsect, 1) != RES_OK)
				return 0;
			fs->winflag = 0;
			if (wsect < (fs->fatbase + fs->sects_fat)) {	/* In FAT area */
				for (n = fs->n_fats; n >= 2; n--) {	/* Refrect the change to all FAT copies */
					wsect += fs->sects_fat;
					disk_write(0, fs->win, wsect, 1);
				}
			}
		}
		if (sector) {
			if (disk_read(0, fs->win, sector, 1) != RES_OK)
				return 0;
			fs->winsect = sector;
		}
	}
	return 1;
}


DWORD get_fattime ()
{
return 1;
}

/*-----------------------------------------------------------------------*/
/* Clean-up cached data                                                  */
/*-----------------------------------------------------------------------*/

static
FRESULT sync (void)		/* FR_OK: successful, FR_RW_ERROR: failed */
{
	FATFS *fs = FatFs;


	fs->winflag = 1;
	if (!move_window(0)) return FR_RW_ERROR;
	/* Update FSInfo sector if needed */
	if (fs->fs_type == 3 && fs->fsi_flag) {
		fs->winsect = 0;
		memset(fs->win, 0, 512U);
		*(volatile BYTE*)(&fs->win[510])=(BYTE)(0xAA55); *(volatile BYTE*)((&fs->win[510])+1)=(BYTE)((WORD)(0xAA55)>>8);
		*(volatile BYTE*)(&fs->win[0])=(BYTE)(0x41615252); *(volatile BYTE*)((&fs->win[0])+1)=(BYTE)((WORD)(0x41615252)>>8); *(volatile BYTE*)((&fs->win[0])+2)=(BYTE)((DWORD)(0x41615252)>>16); *(volatile BYTE*)((&fs->win[0])+3)=(BYTE)((DWORD)(0x41615252)>>24);
		*(volatile BYTE*)(&fs->win[484])=(BYTE)(0x61417272); *(volatile BYTE*)((&fs->win[484])+1)=(BYTE)((WORD)(0x61417272)>>8); *(volatile BYTE*)((&fs->win[484])+2)=(BYTE)((DWORD)(0x61417272)>>16); *(volatile BYTE*)((&fs->win[484])+3)=(BYTE)((DWORD)(0x61417272)>>24);
		*(volatile BYTE*)(&fs->win[488])=(BYTE)(fs->free_clust); *(volatile BYTE*)((&fs->win[488])+1)=(BYTE)((WORD)(fs->free_clust)>>8); *(volatile BYTE*)((&fs->win[488])+2)=(BYTE)((DWORD)(fs->free_clust)>>16); *(volatile BYTE*)((&fs->win[488])+3)=(BYTE)((DWORD)(fs->free_clust)>>24);
		*(volatile BYTE*)(&fs->win[492])=(BYTE)(fs->last_clust); *(volatile BYTE*)((&fs->win[492])+1)=(BYTE)((WORD)(fs->last_clust)>>8); *(volatile BYTE*)((&fs->win[492])+2)=(BYTE)((DWORD)(fs->last_clust)>>16); *(volatile BYTE*)((&fs->win[492])+3)=(BYTE)((DWORD)(fs->last_clust)>>24);
		disk_write(0, fs->win, fs->fsi_sector, 1);
		fs->fsi_flag = 0;
	}
	/* Make sure that no pending write process in the physical drive */
	if (disk_ioctl(0, 0	, 0) != RES_OK)
		return FR_RW_ERROR;
	return FR_OK;
}




/*-----------------------------------------------------------------------*/
/* Get a cluster status                                                  */
/*-----------------------------------------------------------------------*/

static
CLUST get_cluster (	/* 0,>=2: successful, 1: failed */
	CLUST clust		/* Cluster# to get the link information */
)
{
	WORD wc, bc;
	DWORD fatsect;
	FATFS *fs = FatFs;


	if (clust >= 2 && clust < fs->max_clust) {		/* Valid cluster# */
		fatsect = fs->fatbase;
		switch (fs->fs_type) {
		case 1 :
			bc = (WORD)clust * 3 / 2;
			if (!move_window(fatsect + bc / 512U)) break;
			wc = fs->win[bc % 512U]; bc++;
			if (!move_window(fatsect + bc / 512U)) break;
			wc |= (WORD)fs->win[bc % 512U] << 8;
			return (clust & 1) ? (wc >> 4) : (wc & 0xFFF);

		case 2 :
			if (!move_window(fatsect + clust / 256)) break;
			return (WORD)(((WORD)*(volatile BYTE*)((&fs->win[((WORD)clust * 2) % 512U])+1)<<8)|(WORD)*(volatile BYTE*)(&fs->win[((WORD)clust * 2) % 512U]));
		case 3 :
			if (!move_window(fatsect + clust / 128)) break;
			return (DWORD)(((DWORD)*(volatile BYTE*)((&fs->win[((WORD)clust * 4) % 512U])+3)<<24)|((DWORD)*(volatile BYTE*)((&fs->win[((WORD)clust * 4) % 512U])+2)<<16)|((WORD)*(volatile BYTE*)((&fs->win[((WORD)clust * 4) % 512U])+1)<<8)|*(volatile BYTE*)(&fs->win[((WORD)clust * 4) % 512U])) & 0x0FFFFFFF;
		}
	}

	return 1;	/* Out of cluster range, or an error occured */
}




/*-----------------------------------------------------------------------*/
/* Change a cluster status                                               */
/*-----------------------------------------------------------------------*/

static
BOOL put_cluster (	/* TRUE: successful, FALSE: failed */
	CLUST clust,	/* Cluster# to change (must be 2 to fs->max_clust-1) */
	CLUST val		/* New value to mark the cluster */
)
{
	WORD bc;
	BYTE *p;
	DWORD fatsect;
	FATFS *fs = FatFs;


	fatsect = fs->fatbase;
	switch (fs->fs_type) {
	case 1 :
		bc = (WORD)clust * 3 / 2;
		if (!move_window(fatsect + bc / 512U)) return 0;
		p = &fs->win[bc % 512U];
		*p = (clust & 1) ? ((*p & 0x0F) | ((BYTE)val << 4)) : (BYTE)val;
		bc++;
		fs->winflag = 1;
		if (!move_window(fatsect + bc / 512U)) return 0;
		p = &fs->win[bc % 512U];
		*p = (clust & 1) ? (BYTE)(val >> 4) : ((*p & 0xF0) | ((BYTE)(val >> 8) & 0x0F));
		break;

	case 2 :
		if (!move_window(fatsect + clust / 256)) return 0;
		*(volatile BYTE*)(&fs->win[((WORD)clust * 2) % 512U])=(BYTE)((WORD)val); *(volatile BYTE*)((&fs->win[((WORD)clust * 2) % 512U])+1)=(BYTE)((WORD)((WORD)val)>>8);
		break;
	case 3 :
		if (!move_window(fatsect + clust / 128)) return 0;
		*(volatile BYTE*)(&fs->win[((WORD)clust * 4) % 512U])=(BYTE)(val); *(volatile BYTE*)((&fs->win[((WORD)clust * 4) % 512U])+1)=(BYTE)((WORD)(val)>>8); *(volatile BYTE*)((&fs->win[((WORD)clust * 4) % 512U])+2)=(BYTE)((DWORD)(val)>>16); *(volatile BYTE*)((&fs->win[((WORD)clust * 4) % 512U])+3)=(BYTE)((DWORD)(val)>>24);
		break;
	default :
		return 0;
	}
	fs->winflag = 1;
	return 1;
}




/*-----------------------------------------------------------------------*/
/* Remove a cluster chain                                                */
/*-----------------------------------------------------------------------*/

static
BOOL remove_chain (	/* TRUE: successful, FALSE: failed */
	CLUST clust		/* Cluster# to remove chain from */
)
{
	CLUST nxt;
	FATFS *fs = FatFs;


	while (clust >= 2 && clust < fs->max_clust) {
		nxt = get_cluster(clust);
		if (nxt == 1) return 0;
		if (!put_cluster(clust, 0)) return 0;
		if (fs->free_clust != (CLUST)0xFFFFFFFF) {
			fs->free_clust++;
			fs->fsi_flag = 1;
		}
		clust = nxt;
	}
	return 1;
}




/*-----------------------------------------------------------------------*/
/* Stretch or create a cluster chain                                     */
/*-----------------------------------------------------------------------*/

static
CLUST create_chain (	/* 0: No free cluster, 1: Error, >=2: New cluster number */
	CLUST clust			/* Cluster# to stretch, 0 means create new */
)
{
	CLUST cstat, ncl, scl, mcl;
	FATFS *fs = FatFs;


	mcl = fs->max_clust;
	if (clust == 0) {		/* Create new chain */
		scl = fs->last_clust;			/* Get last allocated cluster */
		if (scl < 2 || scl >= mcl) scl = 1;
	}
	else {					/* Stretch existing chain */
		cstat = get_cluster(clust);		/* Check the cluster status */
		if (cstat < 2) return 1;		/* It is an invalid cluster */
		if (cstat < mcl) return cstat;	/* It is already followed by next cluster */
		scl = clust;
	}

	ncl = scl;				/* Start cluster */
	for (;;) {
		ncl++;							/* Next cluster */
		if (ncl >= mcl) {				/* Wrap around */
			ncl = 2;
			if (ncl > scl) return 0;	/* No free custer */
		}
		cstat = get_cluster(ncl);		/* Get the cluster status */
		if (cstat == 0) break;			/* Found a free cluster */
		if (cstat == 1) return 1;		/* Any error occured */
		if (ncl == scl) return 0;		/* No free custer */
	}

	if (!put_cluster(ncl, (CLUST)0x0FFFFFFF)) return 1;		/* Mark the new cluster "in use" */
	if (clust != 0 && !put_cluster(clust, ncl)) return 1;	/* Link it to previous one if needed */

	fs->last_clust = ncl;				/* Update fsinfo */
	if (fs->free_clust != (CLUST)0xFFFFFFFF) {
		fs->free_clust--;
		fs->fsi_flag = 1;
	}

	return ncl;		/* Return new cluster number */
}




/*-----------------------------------------------------------------------*/
/* Get sector# from cluster#                                             */
/*-----------------------------------------------------------------------*/

static
DWORD clust2sect (	/* !=0: sector number, 0: failed - invalid cluster# */
	CLUST clust		/* Cluster# to be converted */
)
{
	FATFS *fs = FatFs;


	clust -= 2;
	if (clust >= (fs->max_clust - 2)) return 0;		/* Invalid cluster# */
	return (DWORD)clust * fs->csize + fs->database;
}




/*-----------------------------------------------------------------------*/
/* Move directory pointer to next                                        */
/*-----------------------------------------------------------------------*/

static
BOOL next_dir_entry (	/* TRUE: successful, FALSE: could not move next */
	DIR *dj				/* Pointer to directory object */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
免费在线观看视频一区| 欧美成人aa大片| 成人免费视频一区二区| 国产综合久久久久影院| 国产一区在线观看麻豆| 韩国欧美国产1区| 精品一区中文字幕| 国产黄色91视频| 成人精品视频一区二区三区| caoporm超碰国产精品| 99re8在线精品视频免费播放| 91老师片黄在线观看| gogo大胆日本视频一区| 在线观看国产91| 91麻豆精品国产91久久久久| 日韩免费视频线观看| 久久综合999| 亚洲女人小视频在线观看| 亚洲午夜精品在线| 蜜桃视频在线观看一区| 久久99久久99| 99视频在线精品| 欧美精品日日鲁夜夜添| 国产婷婷精品av在线| 亚洲激情成人在线| 日本中文一区二区三区| av电影在线观看不卡 | 中文字幕在线观看不卡视频| 亚洲综合一区在线| 精品一二线国产| 不卡的av电影| 欧美一卡二卡三卡四卡| 中文字幕久久午夜不卡| 亚洲国产精品久久人人爱 | 亚洲欧美一区二区视频| 午夜精品久久久| 国产成人精品三级麻豆| 欧美日韩电影在线播放| 欧美极品美女视频| 日韩激情一二三区| av在线播放不卡| 精品国产伦一区二区三区观看体验 | 99久久精品久久久久久清纯| 91精品福利在线一区二区三区 | 国产成人精品影院| 欧美日韩在线不卡| 国产精品伦一区二区三级视频| 蜜桃传媒麻豆第一区在线观看| 99久久免费国产| 久久精品欧美一区二区三区麻豆| 亚洲第一搞黄网站| 成人性生交大片免费看在线播放| 7777精品伊人久久久大香线蕉完整版 | 亚洲天堂精品视频| 久久精品国产亚洲a| 欧日韩精品视频| 综合久久久久久| 国产精品一区二区在线观看网站 | 精品一区二区免费在线观看| 欧美主播一区二区三区美女| 国产精品电影一区二区三区| 国产一区二区三区四区在线观看| 91精品国产综合久久久久久| 亚洲18女电影在线观看| 91久久精品一区二区| 亚洲日本在线视频观看| 成人久久18免费网站麻豆 | 精品国产网站在线观看| 美女视频网站黄色亚洲| 欧美男同性恋视频网站| 亚洲aⅴ怡春院| 69av一区二区三区| 日韩精品免费专区| 欧美一二三四在线| 久久国产尿小便嘘嘘尿| 日韩精品最新网址| 韩国v欧美v亚洲v日本v| 2020国产精品| 成人性视频免费网站| 国产精品灌醉下药二区| 91麻豆免费看片| 夜夜精品视频一区二区| 色综合久久88色综合天天6| 亚洲男人天堂av| 欧美无乱码久久久免费午夜一区 | 狠狠网亚洲精品| 久久久精品天堂| 成人ar影院免费观看视频| 亚洲视频香蕉人妖| 欧美日韩国产精品成人| 免费成人在线播放| 久久精品一区四区| 99国产欧美另类久久久精品| 亚洲国产日韩在线一区模特| 欧美群妇大交群的观看方式| 麻豆国产精品一区二区三区| 日本一区二区三区dvd视频在线| 94-欧美-setu| 午夜视频一区在线观看| 日韩一级大片在线| 岛国一区二区三区| 亚洲男人的天堂在线aⅴ视频 | 狠狠色丁香久久婷婷综合_中| 国产欧美一区二区三区在线看蜜臀 | 欧美国产日韩精品免费观看| 在线一区二区观看| 久久99久久精品欧美| 亚洲欧美日韩电影| 日韩一区二区影院| 91视频国产资源| 久久精品国产99| 一区二区国产视频| xfplay精品久久| 91豆麻精品91久久久久久| 国产在线播放一区二区三区 | 欧美一区二区视频在线观看2022| 国产精品中文字幕一区二区三区| 自拍偷拍亚洲综合| 精品国产三级电影在线观看| 在线观看av不卡| 国产成人高清在线| 亚洲成人自拍网| 亚洲欧美日韩国产成人精品影院| 精品久久久久久久久久久久久久久 | 久久精品噜噜噜成人88aⅴ| 国产精品久久久久久久久免费桃花 | 蜜桃视频在线观看一区| 一区在线中文字幕| 久久久久97国产精华液好用吗| 欧美网站大全在线观看| 91丨九色丨蝌蚪富婆spa| 精品一区二区在线视频| 亚洲一区二区视频| 亚洲人成影院在线观看| 久久精品欧美日韩| 日韩精品自拍偷拍| 91精品国产综合久久福利软件 | 欧美tickling网站挠脚心| 欧美视频一区二区在线观看| 91在线小视频| 99久精品国产| 99精品久久只有精品| 国产成人8x视频一区二区| 国产真实乱子伦精品视频| 精品一区二区国语对白| 久久超级碰视频| 久久国产成人午夜av影院| 美女久久久精品| 久久aⅴ国产欧美74aaa| 精品中文字幕一区二区小辣椒| 日本午夜一区二区| 奇米777欧美一区二区| 麻豆91免费观看| 国内精品久久久久影院色| 狠狠v欧美v日韩v亚洲ⅴ| 蜜乳av一区二区| 久久99国产精品久久99| 狠狠色综合日日| 国产乱子伦视频一区二区三区| 国产一二精品视频| 粉嫩av一区二区三区在线播放| 高清不卡一二三区| 不卡视频在线看| 在线观看日韩高清av| 欧美日韩高清一区二区| 91精品国产麻豆国产自产在线| 日韩精品一区二区三区在线播放| 久久综合九色综合97婷婷女人| 国产欧美日韩在线视频| 亚洲色欲色欲www| 日韩精品一二区| 韩国精品主播一区二区在线观看 | 久久免费视频色| 中文字幕在线不卡一区| 亚洲一区视频在线| 久久se精品一区二区| 成人a级免费电影| 91高清在线观看| 精品国产伦一区二区三区免费| 国产清纯白嫩初高生在线观看91| 综合色中文字幕| 免费在线观看视频一区| 成人国产一区二区三区精品| 欧美性受xxxx| 国产午夜亚洲精品午夜鲁丝片| 亚洲天堂福利av| 久久国产精品99久久久久久老狼 | 欧美色视频在线| 久久亚洲二区三区| 亚洲欧美日韩电影| 国产在线精品一区二区| 日本二三区不卡| 久久久www成人免费无遮挡大片| 亚洲激情综合网| 国内精品免费**视频| 在线精品观看国产| 国产欧美日韩在线| 男男成人高潮片免费网站| 色呦呦国产精品| 久久久久久影视|