📄 fat.lst
字号:
C51 COMPILER V6.23a FAT 04/26/2003 12:08:24 PAGE 1
C51 COMPILER V6.23a, COMPILATION OF MODULE FAT
OBJECT MODULE PLACED IN FAT.OBJ
COMPILER INVOKED BY: G:\mp3player\keil\C51\BIN\C51.EXE FAT.c LARGE BROWSE DEBUG OBJECTEXTEND
stmt level source
1 //******************************************************
2 //name : fat.c
3 //this flie include the commands for mass storage reading
4 //and analyze the system structe of the mass storage
5 // zhdgps wikee 2003.4.10
6 //******************************************************
7
8
9 //******************************************************
10 //include file
11 //******************************************************
12
13 #include "fat.h"
14 #include "testuart.h"
*** ERROR C318 IN LINE 14 OF FAT.c: can't open file 'testuart.h'
15 #include "flash.h"
16 #include "uart.h"
17
18 unsigned char FAT_TYPE;
19
20 unsigned char databuff[SectorLength];
21 void Init_File_System(unsigned int *Em_FAT,unsigned char *Em_DIR)
22 {
23 1 unsigned int TotalCluster,BootSector,RsdSector,SectorofFatSize,i,j;
24 1
25 1 ///////////////////////////////////////////////////
26 1 //得到引导扇区所在扇区号,如果介质是不带分区的,则0扇区就是BootSector了。
27 1 ReadPage(ZeroCluster,0,databuff);
28 1 if(!(databuff[0]==0xeb&&databuff[2]==0x90)){ //通过判断EB ?? 90来看是否已经是BPB了
29 2 //带分区的介质
30 2 BootSector=databuff[454]+databuff[455]*256+databuff[456]*(256*256)+databuff[457]*(256*256*256);
*** ERROR C193 IN LINE 30 OF FAT.C: '*': bad operand type
31 2 }
32 1 else BootSector=0;
33 1 ///////////////////////////////////////////////////
34 1
35 1 ////////////////////////////////////////////////
36 1 //得到保留扇区数,总扇区数,总扇区数/每簇扇区数得到簇数,是FAT类型的依据
37 1 ReadPage(ZeroCluster,BootSector,databuff);
38 1 RsdSector=databuff[14]+databuff[15]*256;
*** ERROR C193 IN LINE 38 OF FAT.C: '*': bad operand type
39 1 TotalCluster=(databuff[20]*256+databuff[19])/databuff[13];//FAT16的簇总数=扇区总数/每簇扇区数
*** ERROR C193 IN LINE 39 OF FAT.C: '*': bad operand type
40 1 SectorofFatSize=((databuff[22]+databuff[23]*256));
*** ERROR C193 IN LINE 40 OF FAT.C: '*': bad operand type
41 1 if(TotalCluster==0){ //FAT32的扇区总数和FAT表项长度
42 2 TotalCluster=(databuff[32]+databuff[33]*256+databuff[34]*256*256+databuff[35]*256*256*256)/databuff[13];
*** ERROR C193 IN LINE 42 OF FAT.C: '*': bad operand type
43 2 SectorofFatSize=(databuff[36]+databuff[37]*256+databuff[38]*256*256+databuff[39]*256*256*256);
*** ERROR C193 IN LINE 43 OF FAT.C: '*': bad operand type
44 2 if(SectorofFatSize>(TotalCluster*16/512)) SectorofFatSize=((databuff[22]+databuff[23]*256));
*** ERROR C193 IN LINE 44 OF FAT.C: '*': bad operand type
45 2 }
46 1 ////////////////////////////////////////////////////////////////
47 1
C51 COMPILER V6.23a FAT 04/26/2003 12:08:24 PAGE 2
48 1 // Uart_Printf("\nBootSector:%x RsdSector:%x,TotalCluster:%x SectorofFatSize:%x\n",BootSector,RsdSector,T
-otalCluster,SectorofFatSize);
49 1 // for(i=0;i<512;i++) {if(!(i%32)) Uart_Printf("\n");Uart_Printf("%x ",databuff[i]);}
50 1 /////////////////////////////////////////////////////////////
51 1 //开始读取第一个FAT的第一个扇区
52 1 ReadPage(ZeroCluster,BootSector+RsdSector,databuff);
53 1 //根据总的簇数判断FAT类型,并进行FAT表项转换
54 1 //decied which type of FAT this File System Belongs to
55 1 if(TotalCluster==FAT32){ //FAT32
56 2 FAT_TYPE=FAT32;
57 2 for(i=0,j=0;j<(512-4);i++,j+=4) Em_FAT[i]=(databuff[j]&0x000000ff)|((databuff[j+1]&0x000000ff)<<8)|((dat
-abuff[j+2]&0x000000ff)<<16)|((databuff[j+3]&0x000000ff)<<24);
*** ERROR C193 IN LINE 57 OF FAT.C: '<<': bad operand type
58 2 }
59 1 else if((TotalCluster>0)&&(TotalCluster<FAT12)) {//FAT12
60 2 FAT_TYPE=FAT12;
61 2 for(i=0,j=0;i<(512-3);i+=3) { //f8 (f2 f1) ff ---> f1 f8 ff f2 TotalCluster/3
62 3 Em_FAT[j]=0;
63 3 Em_FAT[j]=databuff[i+1]<<8;//ff00
*** ERROR C193 IN LINE 63 OF FAT.C: '<<': bad operand type
64 3 Em_FAT[j]=Em_FAT[j]|databuff[i];//fff8
65 3 Em_FAT[j]=Em_FAT[j]&0x0fff;//0ff8
66 3
67 3 Em_FAT[++j]=0;
68 3 Em_FAT[j]=databuff[i+2]<<8;//ff00
*** ERROR C193 IN LINE 68 OF FAT.C: '<<': bad operand type
69 3 Em_FAT[j]=Em_FAT[j]|databuff[i+1];//ffff
70 3 Em_FAT[j]=Em_FAT[j]>>4;//0fff
*** ERROR C193 IN LINE 70 OF FAT.C: '>>': bad operand type
71 3 j++;
72 3 }
73 2 }
74 1 else { //FAT16
75 2 FAT_TYPE=FAT16;
76 2 for(i=0,j=0;i<(512-2);i++,j+=2) Em_FAT[i]=(databuff[j]&0x00ff)|((databuff[j+1]&0x00ff)<<8);//如果是FAT16
-则直接赋值
*** ERROR C193 IN LINE 76 OF FAT.C: '<<': bad operand type
77 2 }
78 1 //////////////////////////////////////////////////////////////
79 1
80 1 ////////////////////////////////////////////////
81 1 //读根目录表的第一个扇区并进行相应的转换
82 1 ReadPage(ZeroCluster,BootSector+RsdSector+2*SectorofFatSize,databuff);
83 1 for(i=0;i<512;i++) *(Em_DIR+i)=databuff[i];//处理根目录
84 1
85 1 }
86
87 void ListName(unsigned char *Em_DIR)
88 {
89 1 int i,j;
90 1 j=0;
91 1 for(;Em_DIR[j*32];) {
92 2 if(Em_DIR[j*32]==0xe5) {j++;continue;}
93 2 printuf("\n");for(i=0;i<11;i++) printuf("%x",Em_DIR[j*32+i]);
*** WARNING C209 IN LINE 93 OF FAT.C: '_printuf': too few actual parameters
94 2 j++;
95 2 }
96 1
97 1 }
98
99
C51 COMPILATION COMPLETE. 1 WARNING(S), 13 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -