/***************************************************************************** Storage.h *****************************************************************************/ #ifndef _STORAGE_H #define _STORAGE_H /*****************************************************************************/ #include #define LSM6DS3 1 #define LSM303D 2 #define MOTION_SENSOR LSM6DS3 //LSM303D #define FLIGHT_TIME_MIN (10*60) //至少飞行时间 秒 #define FLIGHT_TIME_MAX (20*60) //至大飞行时间 秒 #define SAVE_INTERVAL_BEFORE_LAUNCH (10*1000) //发射前保存间隔 单位1 Tick(1ms) #define SAVE_INTERVAL_FLIGHT 10 //发射前保存间隔 单位1 Tick(1ms) #define STORAGE_MARK 0x85613652 #define STORAGE_FORMAT_MARK 0x12345678 //格式化,BootCt在原来基础上递增 #define STORAGE_FFORMAT_MARK 0xffffffff //格式化,BootCt恢复1 #define STORAGE_SYSINF1_ADDR 0x00000000 //4KB 000000~000FFF 保存系统信息1区,数据格式:SUT_SYSTEM_INFO #define STORAGE_SYSINF2_ADDR 0x00001000 //4KB 001000~001FFF 保存系统信息2区,数据格式:SUT_SYSTEM_INFO #define STORAGE_FTR_ADDR 0x00010000 //飞行中记录保存区,数据格式:SUT_FTR,至少需要31*900=27.x KB #define STORAGE_FMR_ADDR 0x00020000 //飞行中记录保存区,数据格式:SUT_FMR,至少需要13*45000=572KB #define STORAGE_BFR_ADDR 0x00120000 //发射前记录保存区,数据格式:SUT_BFR,至少需42*10000=205.xKB #define STORAGE_BFR_COUNT_MAX 10000 //10秒存一个,理论最大允许存储 50000秒,即27.7小时,发送只区最后5条记录 #define STORAGE_FTR_COUNT_MAX 900 //1秒存一个, 最大允许存储15分钟,即900秒,即900条记录 #define STORAGE_FMR_COUNT_MAX 45000 //20ms一个,最大允许存储15分钟 //保存在外部FLASH的系统参数 typedef struct SUT_SYSTEM_INFO { unsigned char Mode; //模式 0--模式1 1--模式2 unsigned char Status; //状态:0--待发射 1--飞行中 2-已着陆 unsigned short BootCt; //第几次开机 每开机一次自动加1 unsigned short FireBootCt; //发射时属于第几次开机 unsigned long FireTick; //发射时的Tick unsigned long BFRCt;// 发射前记录数 unsigned long FTRCt;//飞行中Test记录 unsigned long FMRCt;//飞行中Motion记录 unsigned long Mark;//固定一个数值STORAGE_MARK,如果不等,将格式化整个FLASH }__attribute__((packed)) SUT_SYSTEM_INFO; extern SUT_SYSTEM_INFO g_sutSystemInfo; //发射前存储结构,每10秒存一个记录 typedef struct { char Status;//发射状态 0--未发射 1--飞行中 2--已着陆 其他非法 char Vbat;//单位0.1V unsigned short BootCt;//第几次开机,每次开机加1 unsigned long Tick;//从开机到当前的Tick值,每1ms加1 short Ax; short Ay; short Az; short MGx; short MGy; short MGz; short Temp;//温度, 单位0.1℃ short Humi;//湿度 单位0.1% short Pressure;//气压,单位mbar short Height;//气压计高度,单位米 long Longitude;//GNSS 经度 long Latitude;//GNSS 纬度 short Aspect;//GNSS 方位 short Speed;//GNSS 速度 short Altitude;//GNSS 海拔 单位米 }__attribute__((packed)) SUT_BFR,SUT_RECORD;//42bytes //飞行中存储Test结构,每秒存一个记录 typedef struct { char Status;//发射状态 0--未发射 1--飞行中 2--已着陆 其他非法 unsigned short BootCt;//第几次开机,每次开机加1 unsigned long Tick;//从开机到当前的Tick值,每1ms加1 short MGx; short MGy; short MGz; short Temp;//温度, 单位0.1℃ short Humi;//湿度 单位0.1% short Pressure;//气压,单位mbar short Height;//气压计海拔高度,单位米 short Altitude;//GNSS 海拔 long Longitude;//GNSS 经度 long Latitude;//GNSS 纬度 }__attribute__((packed)) SUT_FTR;//31bytes //飞行中存储Motion结构,每20ms存一个记录 typedef struct { char Status;//发射状态 0--未发射 1--飞行中 2--已着陆 其他非法 unsigned short BootCt;//第几次开机,每次开机加1 unsigned long Tick;//从开机到当前的Tick值,每1ms加1 short Ax; short Ay; short Az; }__attribute__((packed)) SUT_FMR;//13 bytes extern SUT_BFR sutBFR; extern SUT_FMR sutFMR; extern SUT_FTR sutFTR; void StorageInit();//初始化存储仓库,判断是否需要格式化,需要则格式化之,不需要则读取系统信息到g_sutSystemInfo void StorageSaveSysInfo(void);//保存系统信息,将g_sutSystemInfo内容保存到FLASH中 void StorageSaveBFR(SUT_BFR *pRecord);//发射前的数据保存 int StorageSaveFTR(SUT_FTR *pRecord);//飞行中的数据保存 每秒一个的FTR记录 int StorageSaveFMR(SUT_FMR *pRecord);//飞行中的数据保存 每20ms一个的FMR记录 int StorageReadBFR(SUT_BFR *pBFR,u32 index); int StorageReadFTR(SUT_FTR *pFTR,u32 index); int StorageReadFMR(SUT_FMR *pFMR,u32 index); int StorageCallFMRCount1(void); int StorageCallFTRCount1(void); int StorageCallBFRCount1(void); /*****************************************************************************/ #endif /*****************************************************************************/