?? file.lst
字號:
148:file.c **** ;**************************************************************************************************
149:file.c **** ;* 函數名稱 : _CreateFile
150:file.c **** ;* 描 述 : 創建文件
151:file.c **** ;* 輸 入 : Filename[11]: 內部文件名
152:file.c **** ;*
153:file.c **** ;* 輸 出 : 文件目錄項索引, MAX_FDT_NUM時為失敗
154:file.c **** ;**************************************************************************************************
155:file.c **** ;*/
156:file.c **** uint16 _CreateFile(char Filename[11])
157:file.c **** {
295 .LM24:
296 /* prologue: frame size=18 */
297 00b4 CF92 push r12
298 00b6 DF92 push r13
299 00b8 EF92 push r14
300 00ba FF92 push r15
301 00bc 0F93 push r16
302 00be 1F93 push r17
303 00c0 CF93 push r28
304 00c2 DF93 push r29
305 00c4 CDB7 in r28,__SP_L__
306 00c6 DEB7 in r29,__SP_H__
307 00c8 6297 sbiw r28,18
308 00ca 0FB6 in __tmp_reg__,__SREG__
309 00cc F894 cli
310 00ce DEBF out __SP_H__,r29
311 00d0 0FBE out __SREG__,__tmp_reg__
312 00d2 CDBF out __SP_L__,r28
313 /* prologue end (size=16) */
314 00d4 6C01 movw r12,r24
315 .LBB11:
316 .LBB12:
158:file.c **** FDT fFDT;
159:file.c **** uint16 ClusIndex, FDTIndex;
160:file.c ****
161:file.c **** /* 查看是否已存在該文件 */
162:file.c **** if (FindSYSNameRootFDT(Filename, &fFDT) != FDT_NO_FOUND)
318 .LM25:
319 00d6 BE01 movw r22,r28
320 00d8 6F5F subi r22,lo8(-(1))
321 00da 7F4F sbci r23,hi8(-(1))
322 00dc 0E94 0000 call _Z18FindSYSNameRootFDTPcP4_FDT
323 00e0 2091 0000 lds r18,FS_RootEntCnt
324 00e4 3091 0000 lds r19,(FS_RootEntCnt)+1
325 00e8 8217 cp r24,r18
326 00ea 9307 cpc r25,r19
327 00ec 11F0 breq .L37
163:file.c **** {
164:file.c **** return MAX_FDT_NUM;
329 .LM26:
330 00ee C901 movw r24,r18
331 00f0 34C0 rjmp .L36
332 .L37:
165:file.c **** }
166:file.c ****
167:file.c **** /* 建立簇鏈 */
168:file.c **** ClusIndex = AddNewClus(EMPTY_CLUS);
334 .LM27:
335 00f2 80E0 ldi r24,lo8(0)
336 00f4 90E0 ldi r25,hi8(0)
337 00f6 0E94 0000 call _Z10AddNewClusj
338 00fa 7C01 movw r14,r24
169:file.c **** if (ClusIndex == BAD_CLUS)
340 .LM28:
341 00fc 87EF ldi r24,lo8(-9)
342 00fe E816 cp r14,r24
343 0100 8FEF ldi r24,hi8(-9)
344 0102 F806 cpc r15,r24
345 0104 31F1 breq .L42
170:file.c **** {
171:file.c **** return MAX_FDT_NUM;
172:file.c **** }
173:file.c ****
174:file.c **** /* 獲得一個空閑文件目錄項 */
175:file.c **** FDTIndex = GetFreeRootFDT();
347 .LM29:
348 0106 0E94 0000 call _Z14GetFreeRootFDTv
349 010a 8C01 movw r16,r24
176:file.c **** if (FDTIndex == MAX_FDT_NUM)
351 .LM30:
352 010c 8091 0000 lds r24,FS_RootEntCnt
353 0110 9091 0000 lds r25,(FS_RootEntCnt)+1
354 0114 0817 cp r16,r24
355 0116 1907 cpc r17,r25
356 0118 C1F0 breq .L40
177:file.c **** {
178:file.c **** goto ERR;
179:file.c **** }
180:file.c ****
181:file.c **** /* 文件目錄項名字 */
182:file.c **** CopyNbyte(fFDT.Name, Filename, 11);
358 .LM31:
359 011a 4BE0 ldi r20,lo8(11)
360 011c 50E0 ldi r21,hi8(11)
361 011e B601 movw r22,r12
362 0120 CE01 movw r24,r28
363 0122 0196 adiw r24,1
364 0124 0E94 0000 call _Z9CopyNbytePvS_j
183:file.c ****
184:file.c **** /* 文件目錄項屬性 */
185:file.c **** fFDT.FstClusLO = ClusIndex;
366 .LM32:
367 0128 ED86 std Y+13,r14
368 012a FE86 std Y+14,r15
186:file.c **** fFDT.Attr = 0;
370 .LM33:
371 012c 1C86 std Y+12,__zero_reg__
187:file.c **** fFDT.FileSize = 0;
373 .LM34:
374 012e 1F86 std Y+15,__zero_reg__
375 0130 188A std Y+16,__zero_reg__
376 0132 198A std Y+17,__zero_reg__
377 0134 1A8A std Y+18,__zero_reg__
188:file.c ****
189:file.c **** /* 寫文件目錄項 */
190:file.c **** if (!WriteRootFDTInfo(FDTIndex, &fFDT))
379 .LM35:
380 0136 BE01 movw r22,r28
381 0138 6F5F subi r22,lo8(-(1))
382 013a 7F4F sbci r23,hi8(-(1))
383 013c C801 movw r24,r16
384 013e 0E94 0000 call _Z16WriteRootFDTInfojP4_FDT
385 0142 8823 tst r24
386 0144 11F0 breq .L40
191:file.c **** {
192:file.c **** goto ERR;
193:file.c **** }
194:file.c **** /* 返回文件目錄項索引 */
195:file.c **** return FDTIndex;
388 .LM36:
389 0146 C801 movw r24,r16
390 0148 08C0 rjmp .L36
391 .L40:
196:file.c ****
197:file.c **** ERR:
198:file.c **** /* 出錯, 刪除簇鏈 */
199:file.c **** DelClusChain(fFDT.FstClusLO);
393 .LM37:
394 014a 8D85 ldd r24,Y+13
395 014c 9E85 ldd r25,Y+14
396 014e 0E94 0000 call _Z12DelClusChainj
397 .L42:
200:file.c **** return MAX_FDT_NUM;
399 .LM38:
400 0152 8091 0000 lds r24,FS_RootEntCnt
401 0156 9091 0000 lds r25,(FS_RootEntCnt)+1
402 .L36:
403 .LBE12:
404 .LBE11:
405 /* epilogue: frame size=18 */
406 015a 6296 adiw r28,18
407 015c 0FB6 in __tmp_reg__,__SREG__
408 015e F894 cli
409 0160 DEBF out __SP_H__,r29
410 0162 0FBE out __SREG__,__tmp_reg__
411 0164 CDBF out __SP_L__,r28
412 0166 DF91 pop r29
413 0168 CF91 pop r28
414 016a 1F91 pop r17
415 016c 0F91 pop r16
416 016e FF90 pop r15
417 0170 EF90 pop r14
418 0172 DF90 pop r13
419 0174 CF90 pop r12
420 0176 0895 ret
421 /* epilogue end (size=15) */
422 /* function uint16 _CreateFile(char*) size 98 (67) */
431 .global _Z10CreateFilePc
433 _Z10CreateFilePc:
201:file.c **** }
202:file.c ****
203:file.c **** /*
204:file.c **** ;**************************************************************************************************
205:file.c **** ;* 函數名稱 : CreateFile
206:file.c **** ;* 描 述 : 創建文件
207:file.c **** ;* 輸 入 : NameStr[11]: 文件名
208:file.c **** ;*
209:file.c **** ;* 輸 出 : TRUE OR FALSE
210:file.c **** ;**************************************************************************************************
211:file.c **** ;*/
212:file.c **** uint8 CreateFile(char NameStr[11])
213:file.c **** {
435 .LM39:
436 /* prologue: frame size=11 */
437 0178 CF93 push r28
438 017a DF93 push r29
439 017c CDB7 in r28,__SP_L__
440 017e DEB7 in r29,__SP_H__
441 0180 2B97 sbiw r28,11
442 0182 0FB6 in __tmp_reg__,__SREG__
443 0184 F894 cli
444 0186 DEBF out __SP_H__,r29
445 0188 0FBE out __SREG__,__tmp_reg__
446 018a CDBF out __SP_L__,r28
447 /* prologue end (size=10) */
448 .LBB13:
449 .LBB14:
214:file.c **** char Filename[11];
215:file.c ****
216:file.c **** /* 轉化為內部文件名 */
217:file.c **** if (!FileNameChange(NameStr, Filename))
451 .LM40:
452 018c BE01 movw r22,r28
453 018e 6F5F subi r22,lo8(-(1))
454 0190 7F4F sbci r23,hi8(-(1))
455 0192 0E94 0000 call _Z14FileNameChangePcS_
456 0196 8823 tst r24
457 0198 59F0 breq .L46
218:file.c **** {
219:file.c **** return FALSE;
220:file.c **** }
221:file.c **** /* 創建文件 */
222:file.c **** if (_CreateFile(Filename) == MAX_FDT_NUM)
459 .LM41:
460 019a CE01 movw r24,r28
461 019c 0196 adiw r24,1
462 019e 0E94 0000 call _Z11_CreateFilePc
463 01a2 2091 0000 lds r18,FS_RootEntCnt
464 01a6 3091 0000 lds r19,(FS_RootEntCnt)+1
465 01aa 8217 cp r24,r18
466 01ac 9307 cpc r25,r19
467 01ae 19F4 brne .L45
468 .L46:
223:file.c **** {
224:file.c **** return FALSE;
470 .LM42:
471 01b0 80E0 ldi r24,lo8(0)
472 01b2 90E0 ldi r25,hi8(0)
473 01b4 02C0 rjmp .L43
474 .L45:
225:file.c **** }
226:file.c **** return TRUE;
476 .LM43:
477 01b6 81E0 ldi r24,lo8(1)
478 01b8 90E0 ldi r25,hi8(1)
479 .L43:
480 .LBE14:
481 .LBE13:
482 /* epilogue: frame size=11 */
483 01ba 2B96 adiw r28,11
484 01bc 0FB6 in __tmp_reg__,__SREG__
485 01be F894 cli
486 01c0 DEBF out __SP_H__,r29
487 01c2 0FBE out __SREG__,__tmp_reg__
488 01c4 CDBF out __SP_L__,r28
489 01c6 DF91 pop r29
490 01c8 CF91 pop r28
491 01ca 0895 ret
492 /* epilogue end (size=9) */
493 /* function uint8 CreateFile(char*) size 42 (23) */
500 .global _Z8OpenFilePc
502 _Z8OpenFilePc:
227:file.c **** }
228:file.c ****
229:file.c **** /*
230:file.c **** ;**************************************************************************************************
231:file.c **** ;* 函數名稱 : OpenFile
232:file.c **** ;* 描 述 : 打開文件
233:file.c **** ;* 輸 入 : NameStr[11]: 外部文件名
234:file.c **** ;*
235:file.c **** ;* 輸 出 : 文件指針
236:file.c **** ;**************************************************************************************************
237:file.c **** ;*/
238:file.c **** M_FILE OpenFile(char NameStr[11])
239:file.c **** {
504 .LM44:
505 /* prologue: frame size=11 */
506 01cc EF92 push r14
507 01ce FF92 push r15
508 01d0 0F93 push r16
509 01d2 1F93 push r17
510 01d4 CF93 push r28
511 01d6 DF93 push r29
512 01d8 CDB7 in r28,__SP_L__
513 01da DEB7 in r29,__SP_H__
514 01dc 2B97 sbiw r28,11
515 01de 0FB6 in __tmp_reg__,__SREG__
516 01e0 F894 cli
517 01e2 DEBF out __SP_H__,r29
518 01e4 0FBE out __SREG__,__tmp_reg__
519 01e6 CDBF out __SP_L__,r28
520 /* prologue end (size=14) */
521 .LBB15:
522 .LBB16:
240:file.c **** char Filename[11];
241:file.c **** uint16 FDTIndex;
242:file.c **** M_FILE fp;
243:file.c ****
244:file.c **** /* 轉化為內部文件名 */
245:file.c **** if (!FileNameChange(NameStr, Filename))
524 .LM45:
525 01e8 BE01 movw r22,r28
526 01ea 6F5F subi r22,lo8(-(1))
527 01ec 7F4F sbci r23,hi8(-(1))
528 01ee 0E94 0000 call _Z14FileNameChangePcS_
529 01f2 8823 tst r24
530 01f4 41F1 breq .L54
246:file.c **** {
247:file.c **** return ((M_FILE)0);
248:file.c **** }
249:file.c ****
250:file.c **** /* 文件是否已打開 */
251:file.c **** fp = _IsFileOpen(Filename);
532 .LM46:
533 01f6 CE01 movw r24,r28
534 01f8 0196 adiw r24,1
535 01fa 0E94 0000 call _Z11_IsFileOpenPc
536 01fe 8C01 movw r16,r24
252:file.c **** if (fp)
538 .LM47:
539 0200 892B or r24,r25
540 0202 99F5 brne .L53
253:file.c **** {
254:file.c **** return fp;
255:file.c **** }
256:file.c ****
257:file.c **** /* 分配文件管理器 */
258:file.c **** fp = GetFreeFileMan();
542 .LM48:
543 0204 0E94 0000 call _Z14GetFreeFileManv
544 0208 8C01 movw r16,r24
259:file.c **** if (!fp)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -