这是一篇示例文章,用来验证博客的排版、代码高亮和目录效果。 内容需要你自己填充 —— 尤其是"为什么这么写"的部分,那才是给别人讲的重点。
背景
考核要求 OLED 菜单必须是整个固件的顶层框架,所有功能都从菜单进入。 而且录制开始后不能改代码、不能重烧,所以菜单的扩展性必须一开始就设计好。
五张表的映射关系
核心思路是:不去写"进入哪个菜单"的判断逻辑,而是把菜单结构本身变成数据。
| 数组 | 含义 | 索引关系 |
|---|---|---|
title[] | 每个屏幕的标题 | 直接按屏号索引 |
name[] | 每个屏幕里各项的文字 | name[cursor] |
count[] | 该屏幕有几项 | 决定 cursor 的回绕边界 |
parent[] | 该项的父屏 | 用于逐级返回 |
cursor[] | 当前光标位置 | 每屏独立记忆 |
关键代码
| |
这里回绕用取模而不是 if,好处是边界逻辑只有一处,屏幕项数变了也不用改代码。
踩过的坑
- 一开始把
cursor写成全局单变量,导致返回父菜单时光标位置丢失; - 改成"每屏一个
cursor“之后,离开时清空的那一步忘了写,造成二次进入位置错乱。
下一步
-
draw()从printf换成 OLED 驱动 - 抽出
menu.h接口,让主固件能调用 - 按赛题验收流程重写自动测试