Storage.h 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. /*****************************************************************************
  2. Storage.h
  3. *****************************************************************************/
  4. #ifndef _STORAGE_H
  5. #define _STORAGE_H
  6. /*****************************************************************************/
  7. #include <stm32f10x.h>
  8. #define LSM6DS3 1
  9. #define LSM303D 2
  10. #define MOTION_SENSOR LSM6DS3 //LSM303D
  11. #define FLIGHT_TIME_MIN (10*60) //至少飞行时间 秒
  12. #define FLIGHT_TIME_MAX (20*60) //至大飞行时间 秒
  13. #define SAVE_INTERVAL_BEFORE_LAUNCH (10*1000) //发射前保存间隔 单位1 Tick(1ms)
  14. #define SAVE_INTERVAL_FLIGHT 10 //发射前保存间隔 单位1 Tick(1ms)
  15. #define STORAGE_MARK 0x85613652
  16. #define STORAGE_FORMAT_MARK 0x12345678 //格式化,BootCt在原来基础上递增
  17. #define STORAGE_FFORMAT_MARK 0xffffffff //格式化,BootCt恢复1
  18. #define STORAGE_SYSINF1_ADDR 0x00000000 //4KB 000000~000FFF 保存系统信息1区,数据格式:SUT_SYSTEM_INFO
  19. #define STORAGE_SYSINF2_ADDR 0x00001000 //4KB 001000~001FFF 保存系统信息2区,数据格式:SUT_SYSTEM_INFO
  20. #define STORAGE_FTR_ADDR 0x00010000 //飞行中记录保存区,数据格式:SUT_FTR,至少需要31*900=27.x KB
  21. #define STORAGE_FMR_ADDR 0x00020000 //飞行中记录保存区,数据格式:SUT_FMR,至少需要13*45000=572KB
  22. #define STORAGE_BFR_ADDR 0x00120000 //发射前记录保存区,数据格式:SUT_BFR,至少需42*10000=205.xKB
  23. #define STORAGE_BFR_COUNT_MAX 10000 //10秒存一个,理论最大允许存储 50000秒,即27.7小时,发送只区最后5条记录
  24. #define STORAGE_FTR_COUNT_MAX 900 //1秒存一个, 最大允许存储15分钟,即900秒,即900条记录
  25. #define STORAGE_FMR_COUNT_MAX 45000 //20ms一个,最大允许存储15分钟
  26. //保存在外部FLASH的系统参数
  27. typedef struct SUT_SYSTEM_INFO
  28. {
  29. unsigned char Mode; //模式 0--模式1 1--模式2
  30. unsigned char Status; //状态:0--待发射 1--飞行中 2-已着陆
  31. unsigned short BootCt; //第几次开机 每开机一次自动加1
  32. unsigned short FireBootCt; //发射时属于第几次开机
  33. unsigned long FireTick; //发射时的Tick
  34. unsigned long BFRCt;// 发射前记录数
  35. unsigned long FTRCt;//飞行中Test记录
  36. unsigned long FMRCt;//飞行中Motion记录
  37. unsigned long Mark;//固定一个数值STORAGE_MARK,如果不等,将格式化整个FLASH
  38. }__attribute__((packed)) SUT_SYSTEM_INFO;
  39. extern SUT_SYSTEM_INFO g_sutSystemInfo;
  40. //发射前存储结构,每10秒存一个记录
  41. typedef struct
  42. {
  43. char Status;//发射状态 0--未发射 1--飞行中 2--已着陆 其他非法
  44. char Vbat;//单位0.1V
  45. unsigned short BootCt;//第几次开机,每次开机加1
  46. unsigned long Tick;//从开机到当前的Tick值,每1ms加1
  47. short Ax;
  48. short Ay;
  49. short Az;
  50. short MGx;
  51. short MGy;
  52. short MGz;
  53. short Temp;//温度, 单位0.1℃
  54. short Humi;//湿度 单位0.1%
  55. short Pressure;//气压,单位mbar
  56. short Height;//气压计高度,单位米
  57. long Longitude;//GNSS 经度
  58. long Latitude;//GNSS 纬度
  59. short Aspect;//GNSS 方位
  60. short Speed;//GNSS 速度
  61. short Altitude;//GNSS 海拔 单位米
  62. }__attribute__((packed)) SUT_BFR,SUT_RECORD;//42bytes
  63. //飞行中存储Test结构,每秒存一个记录
  64. typedef struct
  65. {
  66. char Status;//发射状态 0--未发射 1--飞行中 2--已着陆 其他非法
  67. unsigned short BootCt;//第几次开机,每次开机加1
  68. unsigned long Tick;//从开机到当前的Tick值,每1ms加1
  69. short MGx;
  70. short MGy;
  71. short MGz;
  72. short Temp;//温度, 单位0.1℃
  73. short Humi;//湿度 单位0.1%
  74. short Pressure;//气压,单位mbar
  75. short Height;//气压计海拔高度,单位米
  76. short Altitude;//GNSS 海拔
  77. long Longitude;//GNSS 经度
  78. long Latitude;//GNSS 纬度
  79. }__attribute__((packed)) SUT_FTR;//31bytes
  80. //飞行中存储Motion结构,每20ms存一个记录
  81. typedef struct
  82. {
  83. char Status;//发射状态 0--未发射 1--飞行中 2--已着陆 其他非法
  84. unsigned short BootCt;//第几次开机,每次开机加1
  85. unsigned long Tick;//从开机到当前的Tick值,每1ms加1
  86. short Ax;
  87. short Ay;
  88. short Az;
  89. }__attribute__((packed)) SUT_FMR;//13 bytes
  90. extern SUT_BFR sutBFR;
  91. extern SUT_FMR sutFMR;
  92. extern SUT_FTR sutFTR;
  93. void StorageInit();//初始化存储仓库,判断是否需要格式化,需要则格式化之,不需要则读取系统信息到g_sutSystemInfo
  94. void StorageSaveSysInfo(void);//保存系统信息,将g_sutSystemInfo内容保存到FLASH中
  95. void StorageSaveBFR(SUT_BFR *pRecord);//发射前的数据保存
  96. int StorageSaveFTR(SUT_FTR *pRecord);//飞行中的数据保存 每秒一个的FTR记录
  97. int StorageSaveFMR(SUT_FMR *pRecord);//飞行中的数据保存 每20ms一个的FMR记录
  98. int StorageReadBFR(SUT_BFR *pBFR,u32 index);
  99. int StorageReadFTR(SUT_FTR *pFTR,u32 index);
  100. int StorageReadFMR(SUT_FMR *pFMR,u32 index);
  101. int StorageCallFMRCount1(void);
  102. int StorageCallFTRCount1(void);
  103. int StorageCallBFRCount1(void);
  104. /*****************************************************************************/
  105. #endif
  106. /*****************************************************************************/