导航

    • 登录
    • 搜索
    • 版块
    • 产品
    • 教程
    • 论坛
    • 淘宝
    1. 主页
    2. 4ktf
    4
    • 举报资料
    • 资料
    • 关注
    • 粉丝
    • 屏蔽
    • 帖子
    • 楼层
    • 最佳
    • 群组

    4ktf

    @4ktf

    0
    声望
    1
    楼层
    24
    资料浏览
    0
    粉丝
    0
    关注
    注册时间 最后登录

    4ktf 关注

    4ktf 发布的帖子

    • 我使用OpenMV H7 plus,我想用pyb.Flash模块将变量保存到flash中,可是报错ValueError?
      # python flash读写模块
      import pyb
      import json
      
      class FlashStorage:
          """Flash存储操作类,用于在OpenMV上进行数据的持久化存储"""
      
          def __init__(self, start_addr=0x080E0000, size=512):
              """
              初始化Flash存储
      
              参数:
                  start_addr: Flash存储的起始地址
                  size: 存储区域大小(字节) , size需为 512 的整数倍
              """
              self.start_addr = start_addr
              self.size = size
              self.flash = pyb.Flash(start=start_addr, len=size)
      
          def write(self, data):
              """
              将数据写入Flash
      
              参数:
                  data: 要存储的数据(支持序列化的类型:数字、字符串、列表、字典等)
      
              异常:
                  Exception: 当数据大小超过存储区域时抛出
              """
              # 序列化数据为字节流
              data_bytes = json.dumps(data).encode('utf-8')
      
              # 检查数据大小
              if len(data_bytes) > self.size:
                  raise Exception(f"数据过大({len(data_bytes)}字节),超过Flash存储上限({self.size}字节)")
      
              # 先擦除区域再写入
              self.flash.erase(0, self.size)
              self.flash.write(0, data_bytes)
              return True
      
          def read(self):
              """
              从Flash读取数据
      
              返回:
                  读取并反序列化后的数据,如果没有数据则返回None
              """
              # 读取数据
              data_bytes = self.flash.read(0, self.size)
      
              # 处理数据
              data_str = data_bytes.decode('utf-8').strip('\x00')
      
              if data_str:
                  return json.loads(data_str)
              return None
      
      # 测试程序
      if __name__ == "__main__":
          # 创建Flash存储实例
          flash_store = FlashStorage()
      
          # 测试数据 - 三个0~255的整数
          test_data = [123, 255, 0]
          print(f"准备写入数据: {test_data}")
      
          try:
              # 创建Flash存储实例
              flash_store = FlashStorage()
          
              # 测试数据 - 三个0~255的整数
              test_data = [123, 255, 0]
              print(f"准备写入数据: {test_data}")
              # 写入数据
              if flash_store.write(test_data):
                  print("数据写入成功")
      
                  # 读取数据
                  read_data = flash_store.read()
                  if read_data is not None:
                      print(f"读取到的数据: {read_data}")
      
                      # 验证数据类型和值
                      if isinstance(read_data, list) and len(read_data) == 3:
                          print("数据验证:")
                          for i, value in enumerate(read_data):
                              if isinstance(value, int) and 0 <= value <= 255:
                                  print(f"  第{i+1}个值: {value} (有效)")
                              else:
                                  print(f"  第{i+1}个值: {value} (无效,不在0~255范围或不是整数)")
                      else:
                          print("读取的数据格式不正确")
                  else:
                      print("未读取到任何数据")
      
          except Exception as e:
              print(f"操作失败: {str(e)}")
      
      
      发布在 OpenMV Cam
      4
      4ktf