BearPi-Pico H2821E sle_measure_dis 示例崩溃问题反馈

Viewed 6

基本信息

项目 信息
开发板型号 BearPi-Pico H2821E
芯片型号 BS21E
SDK 版本 CFBB 0.9.0.5 (Git: 89ae830, 2025-09-19)
SDK 仓库 https://gitee.com/bearpi/bearpi-pico_h2821e.git
编译目标 standard-bs21e-1100e
测试示例 sle_measure_dis (Server + Client)
编译环境 Ubuntu 22.04, Python 3.10, scons

问题描述

问题一:系统崩溃 (严重)

现象:运行官方 sle_measure_dis 示例,Server 端在测距过程中随机崩溃,崩溃间隔不固定(几秒到几十秒)。

崩溃日志

APP|exception:8000000c,0xf08000,mepc:0x219aea,mtval:0x0,mcause:0xf08000,ccause:0x0
APP|NMI exception entry!
APP|panic id:0!

复现步骤

  1. 编译官方 sle_measure_dis Server 固件(未做任何修改)
  2. 编译官方 sle_measure_dis Client 固件(未做任何修改)
  3. 分别烧录到两块 H2821E 开发板
  4. 上电运行,Client 自动扫描连接 Server
  5. 连接成功后开始测距,运行一段时间后 Server 崩溃

关键日志片段

Connected. conn_id:0
SLEM SET PARAM. status:0.
SLEM SET ENABLE conn_id:0.
SLEM STATE CHANGED. status:0.
RECEIVE LOCAL IQ. timestamp_sn:xxx
store local iq data commplete .
RECEIVE REMOTE IQ. timestamp_sn:xxx
SLEM get distance done. distance:0.950, time = 12 ms.
...
MSG ADD FAIL. msg_num:10 ret:1.    <-- 消息队列满
...
APP|exception:8000000c             <-- 系统崩溃

补充说明

  • 崩溃前经常出现 MSG ADD FAIL. msg_num:10 提示,说明消息队列已满
  • 官方代码 MEASURE_DIS_MSG_QUEUE_SIZE 定义为 10,可能不够用
  • 我们尝试增大队列到 30,但仍会崩溃

问题二:测距精度偏差

现象:实际距离 30cm,测量结果约 0.95-1.16m,误差约 +0.6-0.8m

测试环境

  • 室内环境,无明显遮挡
  • 两块开发板相距约 30cm
  • 开发板平放在桌面上

测距输出示例

SLEM get distance done. distance:0.950, time = 12 ms.
SLEM get distance done. distance:1.048, time = 11 ms.
SLEM get distance done. distance:1.163, time = 12 ms.

尝试过的调整

  • 修改 TOF_DEFAULT 从 2070 改为 4000 → 结果更差 (2.6m)
  • 修改 TOF_DEFAULT 从 2070 改为 1000 → 无明显改善

已排查项

排查项 结果
SDK 版本 已是最新 (2025-09-19)
编译配置 使用默认配置,未做修改
官方代码 未修改官方代码,直接编译测试
多块板子 使用 4 块板子交叉测试,问题相同
烧录工具 BurnTool_H2821E,波特率 750000

期望获得的帮助

  1. 崩溃问题:是否有已知的修复方案?是否有更稳定的测距示例版本?

  2. 预编译固件:是否有官方预编译的 sle_measure_dis 固件,用于验证我们的编译环境是否正确?

  3. 校准指导:测距精度偏差较大,是否需要进行硬件校准?校准方法是什么?

  4. 消息队列MEASURE_DIS_MSG_QUEUE_SIZE=10 是否需要增大?增大到多少合适?

1 Answers

崩溃问题可以用PC指向 去寻找崩溃点
这个测距还不可商用化,就是有误差的