📖 第 36 章:FPU测试(Julia分形)实验(FPU Julia Fractal)

🔧 正点原子《DMF407 开发指南》V1.0 · Chapter 36
🗨️ 「FPU + Julia 分形:让 MCU 算浮点快 10 倍。」
这一章在干嘛? FPU 实验:Cortex-M4F 单精度浮点单元、Julia 分形绘制、性能对比(不开 FPU vs 开 FPU)。
36.1 FPU & Julia 分形简介36.2 硬件设计36.3 程序设计36.4 下载验证

36.1 FPU & Julia 分形简介

36.1.1 FPU

FPU(Floating Point Unit):硬件单精度浮点(float)运算单元。

注意:FPU 只算 float(32 位),double(64 位)还是软件模拟。如果你的代码全是 double,请改为 float。

36.1.2 Julia 分形

Julia 集合是一种经典分形图,由复数迭代公式 z = z² + c 生成。

原书图 36.1.2.1:Julia 分形图
原书图 36.1.2.1:Julia 分形图

36.2 硬件设计

TFTLCD 显示分形图,KEY0/KEY_UP 切换 c 参数。

36.3 程序设计

36.3.1 开启 FPU

36.3.2 关键代码

void julia(int x, int y, float cx, float cy) {
    float zx = (x - 200) / 200.0f;
    float zy = (y - 240) / 200.0f;
    int iter = 0;
    while (zx*zx + zy*zy < 4.0f && iter < 100) {
        float tmp = zx*zx - zy*zy + cx;
        zy = 2.0f * zx * zy + cy;
        zx = tmp;
        iter++;
    }
    LCD_DrawPoint(x, y, iter_color(iter));   // 按迭代次数上色
}

main:
    while (1) {
        for (int y = 0; y < 480; y++)
            for (int x = 0; x < 800; x++)
                julia(x, y, cx, cy);
    }

原书图 36.3.2.1:FPU 开启前后性能对比
原书图 36.3.2.1:FPU 开启前后性能对比

原书图 36.3.3.1:开启 FPU 后分形图渲染加速
原书图 36.3.3.1:开启 FPU 后分形图渲染加速

36.4 下载验证

LCD 上显示 Julia 分形图,按 KEY0/KEY_UP 改变参数,分图实时变化。

性能对比:关闭 FPU 渲染一帧约 30 秒,开启后 3 秒。差别来自「float vs double + 软件模拟」。

🧠 小测验
Cortex-M4F 是否内置 FPU?
是。
FPU 计算精度?
单精度 float(32 位)。
如何开启 FPU?
MDK 选 FPU + Define 加 __FPU_PRESENT=1, __FPU_USED=1
← 上一篇🏠 顶层目录下一篇 →