逐飞cyt4bb7开源库之Flash储存

  1. 存储结构设计
  • 循环存储:4页(MAX_PAGES)循环使用,每页2048字节
  • 数据布局:
    • 前2032字节:存储508个float数据(508*4=2032)
    • 最后16字节:CRC校验码(4字节) + 索引值(4字节) + 保留(8字节)
    • 全局索引范围:4页共存储2032个数据(508*4)
  1. 核心函数解析
  2. /* 初始化存储系统 */
    void yaw_storage_init(void)
    

    功能:扫描所有存储页,找到最近的有效数据页

  3. 执行流程:

    1. 遍历START_PAGE到START_PAGE+3的页
    2. 读取每页的索引值和CRC校验码
    3. 验证CRC有效性(防止数据损坏)
    4. 找到最新有效页并初始化存储状态
    5. 若无有效页则擦除起始页
  4. 使用场景:系统启动时调用一次

/* 保存数据到Flash */
void yaw_save_to_flash(float yaw)
  • 功能:存储单个yaw数据

  • 执行流程:

    1. 检查当前页是否写满(508个数据)
    2. 若写满则:
      • 计算整页CRC
      • 写入索引和CRC到页尾
      • 切换下一页并擦除旧页
    3. 写入数据到缓冲区
    4. 每10次写入执行一次实时保存(防止意外掉电丢失数据)
  • 参数:
    yaw:需要存储的浮点数值(单位:度)

  • 调用示例:yaw_save_to_flash(45.6f);

    /* 读取历史数据 */
    float yaw_read_historical(uint32_t global_index)
    
  • 功能:按全局索引读取历史数据

  • 参数:
    global_index:0~2031之间的索引值

  • 返回值:对应索引的yaw值,无效索引返回0.0f

  • 执行流程:

    1. 计算目标页(考虑循环存储特性)
    2. 读取对应页的数据
    3. 返回指定位置的数据
  • 调用示例:float val = yaw_read_historical(1023);

    /* 获取总样本数 */
    uint32_t get_total_samples(void)
    
  • 功能:获取当前存储的有效数据总数
  • 返回值:0~2032之间的数值
  • 说明:当存储未满时返回实际存储数量
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白一雨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值