📄 fat.lst
字号:
198 2 }
199 1 else
200 1 {
201 2 //FAT16
202 2 for(;FileData.wCurFDBNo < (U16)FileData.RootDirNum;)
203 2 {
204 3 if(!flag)
205 3 {
206 4 DMA_load_sector(CFatData.dwRootStartlba + (FileData.wCurFDBNo / CFatData.bFDBNumInSec),0x05);
207 4 flag = 1;
208 4 }
209 3 if((((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize))->Attribute != 0x0F)
210 3 &&((((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize))->Attribute & ARCHIVE_DIR) != ARC
-HIVE_DIR))
211 3 {
212 4 if((((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize))->Extension[0] == (S8)'M')
213 4 &&(((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize))->Extension[1] == (S8)'P')
214 4 &&(((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize))->Extension[2] == (S8)'3')
215 4 &&(((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize))->FileName[0] != (S8)DIR_Unused)
216 4 &&(((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize))->FileName[0] != (S8)DIR_Deleted))
217 4 {
218 5 ENDIAN_ASSIGN_4(&FileData.dwFileDataSize,&((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize)
-)->FileSize);
219 5 //FileData.dwFileDataSize = LE32(((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize))->FileSi
-ze);
220 5
221 5 //ENDIAN_ASSIGN_2(&varAl.TmpShort,&((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize))->FSCl
-usLO);
222 5 //FileData.dwFileStartCluNo = (0x0000FFFF)&((Uint32)varAl.TmpShort);
223 5 FileData.dwFileStartCluNo = CFatData.dwMask &((U32)LE16(((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)*
- DIREntrySize))->FSClusLO));
224 5
225 5 //CFatData.fRet = FATERR_NO_ERROR;
226 5 //将该文件FAT表读出并放到SRAM中
227 5 ReadFileFAT();
C51 COMPILER V8.08 FAT 07/28/2007 11:42:16 PAGE 5
228 5
229 5 //varAl.WAVE_Flg = 0;
230 5 return OK;
231 5 }
232 4 /*else if((((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize))->Extension[0] == 'W')
233 4 &&(((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize))->Extension[1] == 'A')
234 4 &&(((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize))->Extension[2] == 'V'))
235 4 {
236 4 ENDIAN_ASSIGN_4(&FileData.dwFileDataSize,&((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize)
-)->FileSize);
237 4 ENDIAN_ASSIGN_2(&varAl.TmpShort,&((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize))->FSClus
-LO);
238 4 FileData.dwFileStartCluNo = (0x0000FFFF)&((Uint32)varAl.TmpShort);
239 4
240 4 //CFatData.fRet = FATERR_NO_ERROR;
241 4 FileData.wCurFDBNo++;
242 4
243 4 //将该文件FAT表读出并放到SRAM中,起始地址为0xD000
244 4 ReadFileFAT();
245 4 varAl.WAVE_Flg = 1;
246 4 return(1);
247 4 }*/
248 4 else
249 4 {
250 5 FileData.wCurFDBNo++;
251 5 if(!(FileData.wCurFDBNo & 0x0F))
252 5 flag = 0;
253 5 }
254 4 }
255 3 else
256 3 {
257 4 FileData.wCurFDBNo++;
258 4 if(!(FileData.wCurFDBNo & 0x0F))
259 4 flag = 0;
260 4 }
261 3 }
262 2 //CFatData.fRet = FATERR_NO_FILE;
263 2 #if TX_DEBUG
264 2 //SendChar(0xC1);
265 2 #endif
266 2 return KO;
267 2 }
268 1 }
269 /************************************************
270 函 数 名: Backward()
271 功 能:
272 说 明:
273 调 用:
274 全局变量:
275 入口参数:无
276 出口参数:无
277 返 回 值:
278 ************************************************/
279 bit Backward(void)
280 {
281 1 bit flag = 0;
282 1 U8 index;
283 1 U32 position;
284 1 if(CFatData.fFAT32)
285 1 {
286 2 //FAT32
287 2 varAl.TmpShort = FileData.wCurFDBNo;
C51 COMPILER V8.08 FAT 07/28/2007 11:42:16 PAGE 6
288 2 varAl.TmpLong = FileData.dwCurCluNo;
289 2 if(FileData.wCurFDBNo)
290 2 FileData.wCurFDBNo--;
291 2 else
292 2 {
293 3 FileData.wCurFDBNo = (U16)CFatData.bSectorsPerClu * CFatData.wBytesPerSec / DIREntrySize - 1;
294 3 if(FileData.dwCurCluNo)
295 3 FileData.dwCurCluNo--;
296 3 else
297 3 FileData.dwCurCluNo = FileData.RootDirNum - 1;
298 3 }
299 2 for(;;)
300 2 {
301 3 position = FileData.dwCurCluNo;
302 3 for(index = 0; index < MAX_FILE_FRAGMENT_NUMBER; index++)
303 3 {
304 4 if(position < rootclusters[index].number)
305 4 {
306 5 position = rootclusters[index].cluster + position;
307 5 break;
308 5 }
309 4 else
310 4 {
311 5 position -= rootclusters[index].number;
312 5 }
313 4 }
314 3 position = CFatData.dwClu2Startlba + (position - 2)* (U32)CFatData.bSectorsPerClu;
315 3 for(;FileData.wCurFDBNo < (U16)CFatData.bSectorsPerClu * CFatData.wBytesPerSec / DIREntrySize;)
316 3 {
317 4 if(!flag)
318 4 {
319 5 DMA_load_sector(position + FileData.wCurFDBNo * DIREntrySize / CFatData.wBytesPerSec, 0x05);
320 5 flag = 1;
321 5 }
322 4 if((((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize))->Attribute != 0x0F)
323 4 &&((((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize))->Attribute & ARCHIVE_DIR) != A
-RCHIVE_DIR))
324 4 {
325 5 if((((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize))->Extension[0] == (S8)'M')
326 5 &&(((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize))->Extension[1] == (S8)'P')
327 5 &&(((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize))->Extension[2] == (S8)'3')
328 5 &&(((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize))->FileName[0] != (S8)DIR_Unused)
329 5 &&(((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize))->FileName[0] != (S8)DIR_Deleted))
330 5 {
331 6 ENDIAN_ASSIGN_4(&FileData.dwFileDataSize,&((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySiz
-e))->FileSize);
332 6 FileData.dwFileStartCluNo = CFatData.dwMask &((U32)LE16(((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)*
-DIREntrySize))->FSClusLO));
333 6 FileData.dwFileStartCluNo += CFatData.dwMask &(((U32)LE16(((_DIR *)(sbuf1 + (FileData.wCurFDBN
-o & 0x0F)* DIREntrySize))->FSClusHI)) << 16);
334 6 ReadFileFAT();
335 6 return OK;
336 6 }
337 5 else
338 5 {
339 6 FileData.wCurFDBNo--;
340 6 if((FileData.wCurFDBNo & 0x0F)== 0x0F)
341 6 flag = 0;
342 6 if((FileData.dwCurCluNo == varAl.TmpLong)&&(FileData.wCurFDBNo == varAl.TmpShort))
343 6 return KO;
344 6 }
345 5 }
C51 COMPILER V8.08 FAT 07/28/2007 11:42:16 PAGE 7
346 4 else
347 4 {
348 5 FileData.wCurFDBNo--;
349 5 if((FileData.wCurFDBNo & 0x0F)== 0x0F)
350 5 flag = 0;
351 5 if((FileData.dwCurCluNo == varAl.TmpLong)&&(FileData.wCurFDBNo == varAl.TmpShort))
352 5 return KO;
353 5 }
354 4 }
355 3 FileData.wCurFDBNo = (U16)CFatData.bSectorsPerClu * CFatData.wBytesPerSec / DIREntrySize - 1;
356 3 if(FileData.dwCurCluNo)
357 3 FileData.dwCurCluNo--;
358 3 else
359 3 FileData.dwCurCluNo = FileData.RootDirNum - 1;
360 3 }
361 2 }
362 1 else
363 1 {
364 2 //FAT16
365 2 varAl.TmpShort = FileData.wCurFDBNo;
366 2 if(--FileData.wCurFDBNo >= (U16)FileData.RootDirNum)
367 2 FileData.wCurFDBNo = (U16)FileData.RootDirNum - 1;
368 2 for(;FileData.wCurFDBNo != varAl.TmpShort;)
369 2 {
370 3 if(!flag)
371 3 {
372 4 DMA_load_sector(CFatData.dwRootStartlba +(FileData.wCurFDBNo / CFatData.bFDBNumInSec),0x05);
373 4 flag = 1;
374 4 }
375 3 if((((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize))->Attribute != 0x0F)
376 3 &&((((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize))->Attribute & ARCHIVE_DIR) != ARCHIV
-E_DIR))
377 3 {
378 4 if((((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize))->Extension[0] == (S8)'M')
379 4 &&(((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize))->Extension[1] == (S8)'P')
380 4 &&(((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize))->Extension[2] == (S8)'3')
381 4 &&(((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize))->FileName[0] != (S8)DIR_Unused)
382 4 &&(((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize))->FileName[0] != (S8)DIR_Deleted))
383 4 {
384 5 //varAl.WAVE_Flg = 0;
385 5 ENDIAN_ASSIGN_4(&FileData.dwFileDataSize,&((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize)
-)->FileSize);
386 5 FileData.dwFileStartCluNo = CFatData.dwMask &((U32)LE16(((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)*
- DIREntrySize))->FSClusLO));
387 5
388 5 ReadFileFAT();
389 5 return OK;
390 5 }
391 4 /*else if((((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize))->Extension[0] == 'W')
392 4 &&(((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize))->Extension[1] == 'A')
393 4 &&(((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize))->Extension[2] == 'V'))
394 4 {
395 4 //CFatData.fRet = FATERR_NO_ERROR;
396 4 if( FileData.wCurFDBNo >= FileData.RootDirNum)
397 4 FileData.wCurFDBNo = FileData.RootDirNum - 1;
398 4 varAl.WAVE_Flg = 1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -