- 存储结构设计
- 循环存储:4页(MAX_PAGES)循环使用,每页2048字节
- 数据布局:
- 前2032字节:存储508个float数据(508*4=2032)
- 最后16字节:CRC校验码(4字节) + 索引值(4字节) + 保留(8字节)
- 全局索引范围:4页共存储2032个数据(508*4)
- 核心函数解析
-
/* 初始化存储系统 */ void yaw_storage_init(void)
功能:扫描所有存储页,找到最近的有效数据页
-
执行流程:
- 遍历START_PAGE到START_PAGE+3的页
- 读取每页的索引值和CRC校验码
- 验证CRC有效性(防止数据损坏)
- 找到最新有效页并初始化存储状态
- 若无有效页则擦除起始页
-
使用场景:系统启动时调用一次
/* 保存数据到Flash */
void yaw_save_to_flash(float yaw)
-
功能:存储单个yaw数据
-
执行流程:
- 检查当前页是否写满(508个数据)
- 若写满则:
- 计算整页CRC
- 写入索引和CRC到页尾
- 切换下一页并擦除旧页
- 写入数据到缓冲区
- 每10次写入执行一次实时保存(防止意外掉电丢失数据)
-
参数:
yaw:需要存储的浮点数值(单位:度) -
调用示例:yaw_save_to_flash(45.6f);
/* 读取历史数据 */ float yaw_read_historical(uint32_t global_index)
-
功能:按全局索引读取历史数据
-
参数:
global_index:0~2031之间的索引值 -
返回值:对应索引的yaw值,无效索引返回0.0f
-
执行流程:
- 计算目标页(考虑循环存储特性)
- 读取对应页的数据
- 返回指定位置的数据
-
调用示例:float val = yaw_read_historical(1023);
/* 获取总样本数 */ uint32_t get_total_samples(void)
- 功能:获取当前存储的有效数据总数
- 返回值:0~2032之间的数值
- 说明:当存储未满时返回实际存储数量