微控制器上的 JIT 位图文字:每像素只有几个周期
来源:linebender.org — 2026-11-07
📋 概述
Raph Levien 在 RP2350 上重做八十年代家用电脑 vic-2350,需要文字渲染。为了低分辨率下的清晰观感和省内存,他选位图字体,还坚持比例宽度与字距调整。因为采用逐扫描线「追光束」渲染、每像素只有约六个周期的预算,Rust 达不到要求,他用自己造的 symbolasm 写 ARM 汇编,再叠一层 JIT:为每个字符串现场生成最优代码。
🔑 核心要点
- 芯片只有 520KB SRAM 还要留给应用,所以不用帧缓冲,改成逐行填视频缓冲
- 字体用极紧凑格式:所有字形墨迹存在一张与字体同高的宽位图里,保证一行只需一次 32 位读取
- 打包算法还会检测字形重叠(l 是 U 的左半,0 等于去掉空隙的 ()),位图从 1140 字节压到 960 字节
- JIT 用 ldr/ubfx/orr 把字形拼进累加器,并重排指令填延迟槽,把每字形开销从 4 周期降到 3
- 1 位每像素中间缓冲再扩成 565 格式的第二遍,只需每像素 1.75 周期
- 显示列表双缓冲、按 y0 排序维护活动列表,对象进出时调用 start/end 分配暂存空间
💡 金句
Rust 达不到这个性能要求,所以我开始写 ARM 汇编。
← 返回 Lobsters 首页
👍 0
👎 0