📄 kw_fat32.lst
字号:
591 void FM_GetLastFileNameBySN()
592 {
593 1 WORD xdata i,j,k;
594 1 DWORD xdata tmpLBA = 0;
595 1 Dir_tag xdata * pDir = 0;
596 1
597 1 //设置文件前缀
598 1 SM_CpyString(FM_FileName,CM_ConfigParameter.File_Start,CM_ConfigParameter.File_StartLength);
599 1
600 1 for(i=CM_ConfigParameter.File_StartLength;i<8;i++) //设置文件后缀,字符为'0'
601 1 {
602 2 FM_FileName[i] = '0';
603 2 }
604 1 k = CM_ConfigParameter.File_StartLength+1;
605 1
606 1 for(i=0; i<((32 * FM_dirs_fat) / 512); i++) //打开目录表,开始查找文件并排序
607 1 {
608 2 NM_ReadPage(FM_ptr_root + i);
609 2 pDir = ((Dir_tag * ) (& EP6FIFOBUF[0]));
610 2
611 2 for(j=0;j<16;j++)
612 2 {
C51 COMPILER V7.50 KW_FAT32 10/12/2007 17:05:47 PAGE 11
613 3 //跳过已删除项及空项
614 3 if(pDir->FileName[0] == 0x00 || pDir->FileName[0] == 0xe5) //FileName[0]
615 3 {
616 4 pDir ++;
617 4 continue;
618 4 }
619 3
620 3 //调过目录项
621 3 if(pDir->attribute & 0x18)
622 3 {
623 4 pDir ++;
624 4 continue;
625 4 }
626 3
627 3 //比较文件前缀,若相同
628 3 if(SM_CmpString(pDir->FileName,FM_FileName,CM_ConfigParameter.File_StartLength) == 1)
629 3 {
630 4 //比较后缀,若大于,则复制新名称,即每次比较,找出最大的文件名(ASIIC排序)
631 4 if(SM_CmpString2(FM_FileName,pDir->FileName,8-CM_ConfigParameter.File_StartLength,CM_ConfigParameter.F
-ile_StartLength) == 1)
632 4 {
633 5 SM_CpyString(FM_FileName+CM_ConfigParameter.File_StartLength,
634 5 pDir->FileName+CM_ConfigParameter.File_StartLength,8-CM_ConfigParameter.File_StartLength);
635 5 }
636 4 }
637 3
638 3 pDir ++;
639 3 }
640 2 }
641 1
642 1 //获取最大文件编号后,再加1,生成新文件名
643 1 for(i=0; i<8;i++)
644 1 {
645 2 if(FM_FileName[8-i-1] >= '9')
646 2 FM_FileName[8-i-1] = '0';
647 2 else
648 2 {
649 3 FM_FileName[8-i-1]++;
650 3 break;
651 3 }
652 2 }
653 1 //生成新扩展名
654 1 FM_FileName[8] = '.';
655 1 SM_CpyString(FM_FileName+9,CM_ConfigParameter.File_Ext,3);
656 1 }
657
658 /*************************************************************************************
659 Function: FM_CreateNewFileName
660 Description: 创建新文件名
661 Called By:
662 Input: N/A
663 Output: N/A
664 Return: void
665 Others: 如果按序列号生长文件,文件名在目前目录里已有最大文件名上加1
666 如果按照日期时间生产,则获取当前时间。×未实现
667 *************************************************************************************/
668 void FM_CreateNewFileName()
669 {
670 1 //if create file by sn;we should get last file
671 1 if(CM_ConfigParameter.File_End == CONFIG_FILE_SN)
672 1 {
673 2 FM_GetLastFileNameBySN();
C51 COMPILER V7.50 KW_FAT32 10/12/2007 17:05:47 PAGE 12
674 2 }
675 1 }
676
677 /*************************************************************************************
678 Function: FM_DeleteFirstFile
679 Description: 删除第一个文件
680 Called By:
681 Input: N/A
682 Output: N/A
683 Return: void
684 Others: 如果有和配置参数文件前缀不同的文件,则优先删除
685 否则删除序号最小的文件
686 *************************************************************************************/
687 void FM_DeleteFirstFile()
688 {
689 1 FM_GetFirstFileNameBySN();
690 1 FM_DeleteFileInRoot(FM_FileName_F);
691 1 }
692
693 /*************************************************************************************
694 Function: FM_GetFirstFileNameBySN
695 Description: 获取第一个文件
696 Called By:
697 Input: N/A
698 Output: N/A
699 Return: void
700 Others: 如果有和配置参数文件前缀不同的文件,返回该文件
701 否则返回序号最小的文件
702 *************************************************************************************/
703 void FM_GetFirstFileNameBySN()
704 {
705 1 WORD xdata i,j,k;
706 1 DWORD xdata tmpLBA = 0;
707 1 Dir_tag xdata * pDir = 0;
708 1
709 1 //获取文件前缀
710 1 SM_CpyString(FM_FileName_F,CM_ConfigParameter.File_Start,CM_ConfigParameter.File_StartLength);
711 1
712 1 //设置文件后缀
713 1 for(i=CM_ConfigParameter.File_StartLength;i<8;i++)
714 1 FM_FileName_F[i] = 'Z';
715 1 k = CM_ConfigParameter.File_StartLength+1;
716 1
717 1 //开始查找文件并排序
718 1 for(i=0; i<((32 * FM_dirs_fat) / 512); i++)
719 1 {
720 2 NM_ReadPage(FM_ptr_root + i);
721 2 pDir = ((Dir_tag * ) (& EP6FIFOBUF[0]));
722 2
723 2 for(j=0;j<16;j++)
724 2 {
725 3 //跳过已删除文件
726 3 if(pDir->FileName[0] == 0x00 || pDir->FileName[0] == 0xe5) //FileName[0]
727 3 {
728 4 pDir ++;
729 4 continue;
730 4 }
731 3
732 3 //跳过目录项
733 3 if(pDir->attribute & 0x18)
734 3 {
735 4 pDir ++;
C51 COMPILER V7.50 KW_FAT32 10/12/2007 17:05:47 PAGE 13
736 4 continue;
737 4 }
738 3
739 3 //比较文件前缀
740 3 if(SM_CmpString(pDir->FileName,FM_FileName_F,CM_ConfigParameter.File_StartLength) == 1)
741 3 {
742 4 //若文件前缀相同,则比较是否大于,若不大于则复制文件名
743 4 if(SM_CmpString2(FM_FileName_F,pDir->FileName,8-CM_ConfigParameter.File_StartLength,CM_ConfigParameter
-.File_StartLength) == 0)
744 4 {
745 5 SM_CpyString(FM_FileName_F+CM_ConfigParameter.File_StartLength,
746 5 pDir->FileName+CM_ConfigParameter.File_StartLength,8-CM_ConfigParameter.File_StartLength);
747 5 }
748 4 }
749 3 else
750 3 {
751 4 //若文件前缀不同,且不是配置文件,则返回
752 4 if(SM_CmpString(pDir->FileName,"KWCONFIG",8) == 0)
753 4 {
754 5 SM_CpyString(FM_FileName_F,pDir->FileName,8);
755 5 FM_FileName[8] = '.';
756 5 SM_CpyString(FM_FileName_F+9,pDir->ExtName,3);
757 5 return;
758 5 }
759 4 }
760 3 pDir ++;
761 3 }
762 2 }
763 1 }
764
765
766
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 4895 ----
CONSTANT SIZE = 22 ----
XDATA SIZE = 8261 68
PDATA SIZE = ---- ----
DATA SIZE = 2 40
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
EDATA SIZE = ---- ----
HDATA SIZE = ---- ----
XDATA CONST SIZE = ---- ----
FAR CONST SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -