123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- /*****************************************************************************
- Storage.h
- *****************************************************************************/
- #ifndef _STORAGE_H
- #define _STORAGE_H
- /*****************************************************************************/
- #include <stm32f10x.h>
- #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
- /*****************************************************************************/
|