在学习STM32是一直用的是正点原子的教程。之前看过有关Julia分形计算。感觉挺有意思,就自己试了试。在原子的程序基础上改了改,利用1.77寸的液晶屏来显示。效果还可以接受。修改的过程很简单,基本上了解了Julia分型的原理后,主要代码不用改,只是改一下和液晶屏显示有关的内容,我用的是串口屏,也没有使用F7自带的液晶屏接口,使用软件模拟的方式,刷屏速率较低。
void GenerateJulia_fpu(u16 size_x,u16 size_y,u16 offset_x,u16 offset_y,u16 zoom)
{
u8 i;
u16 x,y;
float tmp1,tmp2;
float num_real,num_img;
float radius;
for(y=0;y<size_y;y++)
{
for(x=0;x<size_x;x++)
{
num_real=y-offset_y;
num_real=num_real/zoom;
num_img=x-offset_x;
num_img=num_img/zoom;
i=0;
radius=0;
while((i<ITERATION-1)&&(radius<4))
{
tmp1=num_real*num_real;
tmp2=num_img*num_img;
num_img=2*num_real*num_img+IMG_CONSTANT;
num_real=tmp1-tmp2+REAL_CONSTANT;
radius=tmp1+tmp2;
i++;
}
lcdbuf[128-x-1]=color_map[i];
}
LTDC_Color_Fill(0,y,128-1,y+1,lcdbuf);
}
}
对比完成一次Julia分型计算的时间,分四种情况进行对比:1、不开硬件加速,不适用硬件FPU;2、开硬件加速,不用硬件FPU;3、用硬件FPU,不使用硬件加速;4、使用硬件加速和硬件浮点运算
1、不开硬件加速,不适用硬件FPU,耗时2578.7毫秒
2、开硬件加速,不用硬件FPU;耗时558.3毫秒
3、用硬件FPU,不使用硬件加速,耗时554.3毫秒
4、使用硬件加速和硬件浮点运算,耗时110.6毫秒
这四种设置在比编译时都进行了优化,从结果上看,硬件浮点计算和硬件加速对于提高计算速度作用很明显,由于每刷一次屏过程中包含了和液晶屏有关的部分代码,所以不能直接按时间精确对比四种情况的效率,但是可以大概测试一下。
|