FileSys.h 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. /*****************************************************************************
  2. FileSys.h
  3. *****************************************************************************/
  4. #ifndef _FILE_SYS_H
  5. #define _FILE_SYS_H
  6. /*****************************************************************************/
  7. #include <stm32f10x.h>
  8. #define USE_NEW_FILE_SYSTEM
  9. #define SYS_CONFIG "sys.ini"
  10. #define STORAGE_MARK 0x8abcdef8
  11. #define FILE_INDEX_ADDR 0x00000000 //4KB 000000~000FFF 保存文件索引信息
  12. #define FILE_DATA_ADDR 0x00001000 //~2MB 001000~1FFFFF 所有文件数据存储的首地址
  13. #ifdef USE_NEW_FILE_SYSTEM
  14. #define FILE_DATA_ADDR_END (0x001FFFFF-8192) //最后8K用于作备份文件区
  15. #else
  16. #define FILE_DATA_ADDR_END 0x001FFFFF
  17. #endif
  18. #define FILE_COUNT_MAX 90 //文件最大个数 文件索引表所占空间:sizeof(SUT_FILE_INFO)*FILE_COUNT_MAX+8=44*90+8=3968B=3.9KB
  19. #define FILE_NAME_LEN_MAX 20 //文件名最长字节数 应预留结束符0 因此实际文件名长度应控制在FILE_NAME_LEN_MAX-1
  20. #ifdef USE_NEW_FILE_SYSTEM
  21. #define FILE_ALL_DATA_LEN_MAX (FILE_DATA_ADDR_END+1)//不准确 ,实际上将不了这么多,因为每个文件都占有4K的文件头
  22. #else
  23. #define FILE_ALL_DATA_LEN_MAX (FILE_DATA_ADDR_END-FILE_DATA_ADDR+1) //文件数据最大长度
  24. #endif
  25. #ifdef USE_NEW_FILE_SYSTEM
  26. #define FILE_HEAD_MARK 136321841
  27. #define FILE_HEAD_END 0xabcdef12
  28. typedef struct{
  29. unsigned char fName[FILE_NAME_LEN_MAX];//本页头所描述的文件名字
  30. unsigned char md5[16];//本页头所描述的文件内容的md5
  31. unsigned int fLength;//本页所描述的文件内容共占多少个字节数
  32. unsigned int nextFileHeadAddr;//如果本页为有效文件的页头,且本值不为0时,则指向的是一下个文件的页头地址
  33. unsigned int mark; //表示此页是否是合法的页头信息,否则为数据页或无效页 此项放最后
  34. }__attribute__((packed)) SUT_FILE_PAGE_HEAD;//4+20+16+2+4+4=50
  35. #endif
  36. typedef struct SUT_FILE_INFO
  37. {
  38. char FileName[FILE_NAME_LEN_MAX];
  39. char FileMD5[16];
  40. unsigned long FileLen;
  41. unsigned long FileAddr; //对于新文件存储格式来说,此地址表示页头开始的地址,数据内容要便宜出4096
  42. }__attribute__((packed)) SUT_FILE_INFO;//20+16+4+4=44
  43. typedef struct SUT_FILE_LIST
  44. {
  45. unsigned long Mark;
  46. unsigned long FileCount;//文件个数
  47. SUT_FILE_INFO FileInfo[FILE_COUNT_MAX];//文件信息列表
  48. }__attribute__((packed)) SUT_FILE_LIST;
  49. extern SUT_FILE_LIST g_sutFilesList;
  50. int FileSysInit();
  51. void FileSysSaveIndex(void);
  52. void FileSysReadIndex(void);
  53. int FileCheckMD5(int FileIndex);
  54. /*****************************************************************************/
  55. #endif
  56. /*****************************************************************************/