• OpenMV VSCode 扩展发布了,在插件市场直接搜索OpenMV就可以安装
  • 如果有产品硬件故障问题,比如无法开机,论坛很难解决。可以直接找售后维修
  • 发帖子之前,请确认看过所有的视频教程,https://singtown.com/learn/ 和所有的上手教程http://book.openmv.cc/
  • 每一个新的提问,单独发一个新帖子
  • 帖子需要目的,你要做什么?
  • 如果涉及代码,需要报错提示全部代码文本,请注意不要贴代码图片
  • 必看:玩转星瞳论坛了解一下图片上传,代码格式等问题。
  • 我使用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)}")