学习笔记 · Obsidian

用 BSP 逐步认识 CoreS3 板载外设

ESP-IDFC / C++

BSP 做了哪些准备

应用需要一块能工作的屏幕,但板卡启动时还要处理供电、IO 扩展、总线和驱动。BSP 把这些板级细节封装成入口,之后由 LVGL 等图形库管理控件。M5 BSP 教程

第一轮实验从所选 BSP 版本的显示例子开始。先理解“初始化 → 打开背光 → 获得绘图访问权 → 修改控件 → 释放访问权”。具体调用和错误返回值对照 BSP API 与已锁定版本头文件。

不要同时让自己的驱动和 BSP 各初始化一套相同外设。应用应通过单一所有者使用设备资源。

把官方显示例子改成自己的状态面板

按下列顺序逐项验收,每次只改变一个行为:

实验改什么预期失败时先看
D1 显示把例子中的内容换成固定标题与运行秒数重启后可显示;秒数更新电源、背光、初始化返回值、版本
D2 触摸加一个触摸计数按钮每次有效点击计数一次输入驱动、坐标、事件类型、控件状态
D3 采样显示一个已支持传感器读数正常数据与无效数据可区分传感器初始化、总线、返回码
D4 解耦UI 从队列接收最新快照采样变慢时界面仍能响应UI 线程、锁、队列策略
D5 恢复模拟读传感器失败展示错误与数据年龄,恢复后刷新失败值是否被误当零、旧数据是否冒充新数据

这是本课程的实验设计,尚未在实物执行。板卡例子能运行,只证明例子覆盖的路径通过。

为什么锁住绘图不等于锁住整个程序

访问 LVGL 对象时遵循 BSP 提供的显示锁/线程约定;取得失败时不要继续修改对象。锁内只做短的界面修改,采样和 HTTP 请求在锁外完成。BSP display API

例如网络请求花了 5 秒,如果一直持有显示锁,触摸与刷新可能一起停住。先在网络任务生成结果,再把显示需要的小快照交给 UI,是本项目采用的组织方式。

后续外设按资源成本展开

  • IMU、RTC:先识别测量单位、采样率、校准和无效读数,避免只看“有数字”。
  • microSD:分别处理未插卡、挂载失败、读写失败和空间不足;写日志使用有限缓存和保留策略。
  • 扬声器、麦克风:先对齐采样率、位宽和通道,再检查缓冲区耗尽、欠载与溢出。
  • 摄像头:先单帧,再连续采集;每一帧明确何时借出、显示、归还。

BSP 支持项和示例随版本变化,使用 CoreS3 BSP examples 所列入口检查,不假定板上有某芯片就一定有当前库的完整支持。

算一笔缓冲区账

如果按 320 × 240、RGB565、每像素 2 字节保存完整画面,一帧为 153600 字节,双缓冲为 307200 字节。这是格式和尺寸得出的理论像素数据量,不包括控件、对齐、驱动和其他内存。

降低刷新区域、使用合适缓冲策略往往比直接提高任务优先级更有效。摄像头帧尺寸和像素格式变化时,需要重新计算。

过关标准:能解释一帧数据从谁那里产生、由谁持有、经什么总线发送、何时允许复用;能描述显示失败与传感器失败的不同表现。


返回学习入口 · 来源与版本