嵌入式UI设计:资源受限设备的极致美学
|
跟产品吵。去年一月份,凌晨一点十七分,PM把第三版「呼吸感圆角」切图甩进钉钉群,说“用户需要情绪价值”,我盯着那张十六像素圆角的 SVG 导出图,手抖着点开 Figma 插件——导出时自动加了两层阴影层叠,没关。我当场切屏到 Chrome DevTools 里删掉那两个 标签,但没敢提,因为上周三前端刚在 PR 里注释写“此滤镜会导致 STM32F746 上 FreeType 渲染卡死三帧”。 我说这 UI 不是美学,是优胜劣汰。他笑。我就知道会这样。我说的是真话:你让一个连 JPEG 解码都得手撕 Huffman 表的 MCU 去渲染毛玻璃虚化,它不宕机,它就死给你看——不是崩溃,是静默吞掉第七次 touch 事件,等你拿示波器测 GPIO 电平才发现中断被挤掉了。这不是设计失败,是自然选择。这个我敢打包票。 Lighthouse 跑分截图发到群里没人回。桌面那个没关的录屏还在录,右下角时间显示下午三点零七分。我原以为改掉那两行 canvas.save() 和 restore() 就能压下首帧延迟,结果发现是 FreeRTOS 的 tickless 模式在屏幕灭亮交替时偷偷重置了 SysTick,导致整个动画计时器偏移四百二十毫秒——对,就四百二十,不多不少。我说不准这到底是 HAL 库 bug 还是 ST 官方 demo 里埋了十年的时序陷阱,但我知道谁去倒水的时候,后端老陈正在工位上用热风枪焊那块丢了 boot flag 的 eMMC。 先扔结论后补细节。嵌入式 UI 设计根本没有“极致美学”这回事,只有“最后一行字还能显示”的临界点。所谓美学,是当你把字体从 14px 改成 13px 半粗体、去掉所有 padding、把 icon 尺寸砍掉两个像素、把颜色表从 256 色压缩成 64 色之后,LCD 驱动芯片刚好不再报 FIFO underrun 错误的那个瞬间。你拍板说“美”,是因为再删一像素,字符就开始漏笔画;再减一帧,用户滑动就卡顿。它不是艺术选择,是寄生在硬件 errata 上的苟活策略。 对面工程师换了一根 Type-C 充电线,灰色的,带编织纹。我们俩盯着那根线看了三秒。然后他问:“你确认 SPI Flash 的 QSPI 模式没在 LCD 刷新期间被 DMA 抢占?”我没答。因为我正想着 CDN 账单的事——上季度云图床用了二十三万次,全是 UI 动效预览图,每次上传前自动转 WebP,但我们的设备根本不认 WebP。最后那些图全进了回收站,一分钱没省下来,还拉低了 SRE 的缓存命中率。这事和 UI 无关,但它堵在我喉咙里,比那个漏帧还难受。 有一次勾选合并请求,要干三件事:第一,确认 .gitignore 里删掉了 /build/output/assetmap.json;第二,在 CI YAML 里把 -j4 改成 -j2,否则 Yocto 编译时 OOM;第三,手动进 docker 容器,用 sed 替换掉 vendor/ui-kit/src/core/text-render.js 里第 89 行那个 setTimeout(没错,是 setTimeout,不是 requestAnimationFrame,因为 ARM Cortex-M4 根本没 RAF 实现)。我做完这三步才点绿色按钮。而那个“呼吸感”交互动效本身,总共就十六行 CSS ——不,是十六行纯 inline style,硬编码进 HTML 字符串里,因为 JS 引擎太小,没空间塞 VDOM。 KPI 折算这事挺操蛋。我们组去年定的“UI 启动耗时 ≤ 1.8 秒”指标,按客户给的样机基准跑,没问题;可实际量产出厂那批,换了新批次的 LCD 偏光片,响应延迟多了三十八毫秒,整个指标直接漂移——没人告诉你偏光片也会影响 framebuffer 刷新队列排队逻辑。PM 看报告只扫一眼 1.79,就说达标。我说不达标,他反问:“你能现场拿出 oscilloscope 波形证明这三十八毫秒不是传感器噪声?”我没吭声。不是没波形,是我电脑上那张截图,右上角贴着 Notion 待办清单,写着“修好 STM32H7xx 的 USB CDC 中断冲突”,至今没动。 有次我把全部 icon 打包进 .bin 文件前,顺手用 binwalk 查了查结构,发现里面混进去一个八百六十四字节的 PNG 文件头,开头是 89 50 4E 47 0D 0A 1A 0A——根本不是我们用的格式,是某次误操作从设计稿导出的残留。我删了它,烧录后整块屏白屏三分钟。后来发现是 linker script 把那段地址错标为 .rodata,结果 memcpy 时候踩了 bootloader 的校验区。所以现在我每改一次资源打包,都要先 hexdump 前两百字节,核对 magic number。这个我说不准是不是个例,但至少我们组五台样机里,三台会在这步挂掉。
文章配图,仅供参考 无所谓。反正现在我写文案都用纯 ASCII:字号固定、换行靠 \ 下一步?把 font fallback 逻辑从 switch-case 改成跳转表。昨天试过了,烧录后能快十九毫秒。但得先去仓库借个新版 J-Link,旧的那个不识别 H743 的 TrustZone 启动标志。我现在就去。 (编辑:站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


嵌入式容器化:资源受限设备轻松运行K8s