⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ff.txt

📁 stm32-SDIO+FatFS文件系统txt-int-ascii
💻 TXT
📖 第 1 页 / 共 5 页
字号:
00012c  f0440408          ORR      r4,r4,#8              ;1466
                  |L6.304|
000130  72f4              STRB     r4,[r6,#0xb]          ;1468
000132  2000              MOVS     r0,#0                 ;1470
000134  e78d              B        |L6.82|
;;;1473   
                          ENDP

000136  0000              DCW      0x0000
                  |L6.312|
000138  222a2b2c          DCB      """*+,:<=>?[]|",127,0
00013c  3a3c3d3e
000140  3f5b5d7c
000144  7f00    
000146  00                DCB      0
000147  00                DCB      0

                          AREA ||i.dir_find||, CODE, READONLY, ALIGN=1

                  dir_find PROC
;;;998    static
;;;999    FRESULT dir_find (
000000  e92d41f0          PUSH     {r4-r8,lr}
;;;1000   	DIR *dj			/* Pointer to the directory object linked to the file name */
;;;1001   )
;;;1002   {
000004  4604              MOV      r4,r0
;;;1003   	FRESULT res;
;;;1004   	BYTE c, *dir;
;;;1005   #if _USE_LFN
;;;1006   	BYTE a, ord, sum;
;;;1007   #endif
;;;1008   
;;;1009   	res = dir_sdi(dj, 0);			/* Rewind directory object */
000006  2100              MOVS     r1,#0
000008  4620              MOV      r0,r4
00000a  f7fffffe          BL       dir_sdi
00000e  4605              MOV      r5,r0
;;;1010   	if (res != FR_OK) return res;
000010  b115              CBZ      r5,|L7.24|
000012  4628              MOV      r0,r5
                  |L7.20|
;;;1011   
;;;1012   #if _USE_LFN
;;;1013   	ord = sum = 0xFF;
;;;1014   #endif
;;;1015   	do {
;;;1016   		res = move_window(dj->fs, dj->sect);
;;;1017   		if (res != FR_OK) break;
;;;1018   		dir = dj->dir;					/* Ptr to the directory entry of current index */
;;;1019   		c = dir[DIR_Name];
;;;1020   		if (c == 0) { res = FR_NO_FILE; break; }	/* Reached to end of table */
;;;1021   #if _USE_LFN	/* LFN configuration */
;;;1022   		a = dir[DIR_Attr] & AM_MASK;
;;;1023   		if (c == 0xE5 || ((a & AM_VOL) && a != AM_LFN)) {	/* An entry without valid data */
;;;1024   			ord = 0xFF;
;;;1025   		} else {
;;;1026   			if (a == AM_LFN) {			/* An LFN entry is found */
;;;1027   				if (dj->lfn) {
;;;1028   					if (c & 0x40) {		/* Is it start of LFN sequence? */
;;;1029   						sum = dir[LDIR_Chksum];
;;;1030   						c &= 0xBF; ord = c;	/* LFN start order */
;;;1031   						dj->lfn_idx = dj->index;
;;;1032   					}
;;;1033   					/* Check validity of the LFN entry and compare it with given name */
;;;1034   					ord = (c == ord && sum == dir[LDIR_Chksum] && cmp_lfn(dj->lfn, dir)) ? ord - 1 : 0xFF;
;;;1035   				}
;;;1036   			} else {					/* An SFN entry is found */
;;;1037   				if (!ord && sum == sum_sfn(dir)) break;	/* LFN matched? */
;;;1038   				ord = 0xFF; dj->lfn_idx = 0xFFFF;	/* Reset LFN sequence */
;;;1039   				if (!(dj->fn[NS] & NS_LOSS) && !mem_cmp(dir, dj->fn, 11)) break;	/* SFN matched? */
;;;1040   			}
;;;1041   		}
;;;1042   #else		/* Non LFN configuration */
;;;1043   		if (!(dir[DIR_Attr] & AM_VOL) && !mem_cmp(dir, dj->fn, 11)) /* Is it a valid entry? */
;;;1044   			break;
;;;1045   #endif
;;;1046   		res = dir_next(dj, 0);		/* Next entry */
;;;1047   	} while (res == FR_OK);
;;;1048   
;;;1049   	return res;
;;;1050   }
000014  e8bd81f0          POP      {r4-r8,pc}
                  |L7.24|
000018  bf00              NOP                            ;1015
                  |L7.26|
00001a  6921              LDR      r1,[r4,#0x10]         ;1016
00001c  6820              LDR      r0,[r4,#0]            ;1016
00001e  f7fffffe          BL       move_window
000022  4605              MOV      r5,r0                 ;1016
000024  b105              CBZ      r5,|L7.40|
000026  e016              B        |L7.86|
                  |L7.40|
000028  6966              LDR      r6,[r4,#0x14]         ;1018
00002a  7837              LDRB     r7,[r6,#0]            ;1019
00002c  b90f              CBNZ     r7,|L7.50|
00002e  2504              MOVS     r5,#4                 ;1020
000030  e011              B        |L7.86|
                  |L7.50|
000032  7af0              LDRB     r0,[r6,#0xb]          ;1043
000034  f0100f08          TST      r0,#8                 ;1043
000038  d106              BNE      |L7.72|
00003a  220b              MOVS     r2,#0xb               ;1043
00003c  4630              MOV      r0,r6                 ;1043
00003e  69a1              LDR      r1,[r4,#0x18]         ;1043
000040  f7fffffe          BL       mem_cmp
000044  b900              CBNZ     r0,|L7.72|
000046  e006              B        |L7.86|
                  |L7.72|
000048  2100              MOVS     r1,#0                 ;1046
00004a  4620              MOV      r0,r4                 ;1046
00004c  f7fffffe          BL       dir_next
000050  4605              MOV      r5,r0                 ;1046
000052  2d00              CMP      r5,#0                 ;1047
000054  d0e1              BEQ      |L7.26|
                  |L7.86|
000056  bf00              NOP                            ;1017
000058  4628              MOV      r0,r5                 ;1049
00005a  e7db              B        |L7.20|
;;;1051   
                          ENDP


                          AREA ||i.dir_next||, CODE, READONLY, ALIGN=1

                  dir_next PROC
;;;759    static
;;;760    FRESULT dir_next (	/* FR_OK:Succeeded, FR_NO_FILE:End of table, FR_DENIED:EOT and could not stretch */
000000  e92d41f0          PUSH     {r4-r8,lr}
;;;761    	DIR *dj,		/* Pointer to directory object */
;;;762    	int stretch		/* 0: Do not stretch table, 1: Stretch table if needed */
;;;763    )
;;;764    {
000004  4604              MOV      r4,r0
000006  4688              MOV      r8,r1
;;;765    	DWORD clst;
;;;766    	WORD i;
;;;767    
;;;768    
;;;769    	i = dj->index + 1;
000008  88e0              LDRH     r0,[r4,#6]
00000a  1c40              ADDS     r0,r0,#1
00000c  b286              UXTH     r6,r0
;;;770    	if (!i || !dj->sect)	/* Report EOT when index has reached 65535 */
00000e  b10e              CBZ      r6,|L8.20|
000010  6920              LDR      r0,[r4,#0x10]
000012  b910              CBNZ     r0,|L8.26|
                  |L8.20|
;;;771    		return FR_NO_FILE;
000014  2004              MOVS     r0,#4
                  |L8.22|
;;;772    
;;;773    	if (!(i % (SS(dj->fs) / 32))) {	/* Sector changed? */
;;;774    		dj->sect++;					/* Next sector */
;;;775    
;;;776    		if (dj->clust == 0) {	/* Static table */
;;;777    			if (i >= dj->fs->n_rootdir)	/* Report EOT when end of table */
;;;778    				return FR_NO_FILE;
;;;779    		}
;;;780    		else {					/* Dynamic table */
;;;781    			if (((i / (SS(dj->fs) / 32)) & (dj->fs->csize - 1)) == 0) {	/* Cluster changed? */
;;;782    				clst = get_fat(dj->fs, dj->clust);				/* Get next cluster */
;;;783    				if (clst <= 1) return FR_INT_ERR;
;;;784    				if (clst == 0xFFFFFFFF) return FR_DISK_ERR;
;;;785    				if (clst >= dj->fs->n_fatent) {					/* When it reached end of dynamic table */
;;;786    #if !_FS_READONLY
;;;787    					BYTE c;
;;;788    					if (!stretch) return FR_NO_FILE;			/* When do not stretch, report EOT */
;;;789    					clst = create_chain(dj->fs, dj->clust);		/* Stretch cluster chain */
;;;790    					if (clst == 0) return FR_DENIED;			/* No free cluster */
;;;791    					if (clst == 1) return FR_INT_ERR;
;;;792    					if (clst == 0xFFFFFFFF) return FR_DISK_ERR;
;;;793    					/* Clean-up stretched table */
;;;794    					if (move_window(dj->fs, 0)) return FR_DISK_ERR;	/* Flush active window */
;;;795    					mem_set(dj->fs->win, 0, SS(dj->fs));			/* Clear window buffer */
;;;796    					dj->fs->winsect = clust2sect(dj->fs, clst);	/* Cluster start sector */
;;;797    					for (c = 0; c < dj->fs->csize; c++) {		/* Fill the new cluster with 0 */
;;;798    						dj->fs->wflag = 1;
;;;799    						if (move_window(dj->fs, 0)) return FR_DISK_ERR;
;;;800    						dj->fs->winsect++;
;;;801    					}
;;;802    					dj->fs->winsect -= c;						/* Rewind window address */
;;;803    #else
;;;804    					return FR_NO_FILE;			/* Report EOT */
;;;805    #endif
;;;806    				}
;;;807    				dj->clust = clst;				/* Initialize data for new cluster */
;;;808    				dj->sect = clust2sect(dj->fs, clst);
;;;809    			}
;;;810    		}
;;;811    	}
;;;812    
;;;813    	dj->index = i;
;;;814    	dj->dir = dj->fs->win + (i % (SS(dj->fs) / 32)) * 32;
;;;815    
;;;816    	return FR_OK;
;;;817    }
000016  e8bd81f0          POP      {r4-r8,pc}
                  |L8.26|
00001a  f0160f0f          TST      r6,#0xf               ;773
00001e  d16e              BNE      |L8.254|
000020  6920              LDR      r0,[r4,#0x10]         ;774
000022  1c40              ADDS     r0,r0,#1              ;774
000024  6120              STR      r0,[r4,#0x10]         ;774
000026  68e0              LDR      r0,[r4,#0xc]          ;776
000028  b928              CBNZ     r0,|L8.54|
00002a  6820              LDR      r0,[r4,#0]            ;777
00002c  8900              LDRH     r0,[r0,#8]            ;777
00002e  42b0              CMP      r0,r6                 ;777
000030  dc65              BGT      |L8.254|
000032  2004              MOVS     r0,#4                 ;778
000034  e7ef              B        |L8.22|
                  |L8.54|
000036  6820              LDR      r0,[r4,#0]            ;781
000038  7880              LDRB     r0,[r0,#2]            ;781
00003a  1e40              SUBS     r0,r0,#1              ;781
00003c  ea101f16          TST      r0,r6,LSR #4          ;781
000040  d15d              BNE      |L8.254|
000042  68e1              LDR      r1,[r4,#0xc]          ;782
000044  6820              LDR      r0,[r4,#0]            ;782
000046  f7fffffe          BL       get_fat
00004a  4605              MOV      r5,r0                 ;782
00004c  2d01              CMP      r5,#1                 ;783
00004e  d801              BHI      |L8.84|
000050  2002              MOVS     r0,#2                 ;783
000052  e7e0              B        |L8.22|
                  |L8.84|
000054  1c68              ADDS     r0,r5,#1              ;784
000056  d101              BNE      |L8.92|
000058  2001              MOVS     r0,#1                 ;784
00005a  e7dc              B        |L8.22|
                  |L8.92|
00005c  6820              LDR      r0,[r4,#0]            ;785
00005e  6980              LDR      r0,[r0,#0x18]         ;785
000060  42a8              CMP      r0,r5                 ;785
000062  d846              BHI      |L8.242|
000064  f1b80f00          CMP      r8,#0                 ;788
000068  d101              BNE      |L8.110|
00006a  2004              MOVS     r0,#4                 ;788
00006c  e7d3              B        |L8.22|
                  |L8.110|
00006e  68e1              LDR      r1,[r4,#0xc]          ;789
000070  6820              LDR      r0,[r4,#0]            ;789
000072  f7fffffe          BL       create_chain
000076  4605              MOV      r5,r0                 ;789
000078  b90d              CBNZ     r5,|L8.126|
00007a  2007              MOVS     r0,#7                 ;790
00007c  e7cb              B        |L8.22|
                  |L8.126|
00007e  2d01              CMP      r5,#1                 ;791
000080  d101              BNE      |L8.134|
000082  2002              MOVS     r0,#2                 ;791
000084  e7c7              B        |L8.22|
                  |L8.134|
000086  1c68              ADDS     r0,r5,#1              ;792
000088  d101              BNE      |L8.142|
00008a  2001              MOVS     r0,#1                 ;792
00008c  e7c3              B        |L8.22|
                  |L8.142|
00008e  2100              MOVS     r1,#0                 ;794
000090  6820              LDR      r0,[r4,#0]            ;794
000092  f7fffffe          BL       move_window
000096  b108              CBZ      r0,|L8.156|
000098  2001              MOVS     r0,#1                 ;794
00009a  e7bc              B        |L8.22|
                  |L8.156|
00009c  6821              LDR      r1,[r4,#0]            ;795
00009e  f1010030          ADD      r0,r1,#0x30           ;795
0000a2  f44f7200          MOV      r2,#0x200             ;795
0000a6  2100              MOVS     r1,#0                 ;795
0000a8  f7fffffe          BL       mem_set
0000ac  4629       

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -