微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > Julia分形(硬件FPU)

Julia分形(硬件FPU)

时间:10-02 整理:3721RD 点击:

程序使用了定时器 3做为时间统计功能,用于统计 Julia分形算法的运算时间。

如下,定时器3最大定时时间。

  1. TIM3_Init(65535,10800-1);

复制代码


其他外设的程序在之前的帖子中已经分析过了,这里不再赘述了。

Julia分形算法原子的例程有两个,一个是打开FPU的一个是关闭FPU的,通过宏定义可以在LCD上显示。

主要的Julia分形算法函数如下:

  1. void GenerateJulia_fpu(u16 size_x,u16 size_y,u16 offset_x,u16 offset_y,u16 zoom)
  2. {
  3.         u8 i;
  4.         u16 x,y;  
  5.         float tmp1,tmp2;
  6.         float num_real,num_img;
  7.         float radius;
  8.         for(y=0;y<size_y;y++)
  9.         {
  10.                for(x=0;x<size_x;x++)
  11.                    {
  12.                        num_real=y-offset_y;
  13.                  num_real=num_real/zoom;
  14.                    num_img=x-offset_x;
  15.                   num_img=num_img/zoom;
  16.                    i=0;
  17.                   radius=0;
  18.                    while((i<ITERATION-1)&&(radius<4))
  19.                    {
  20.                            tmp1=num_real*num_real;
  21.                        tmp2=num_img*num_img;
  22.                       num_img=2*num_real*num_img+IMG_CONSTANT;
  23.                      num_real=tmp1-tmp2+REAL_CONSTANT;
  24.                        radius=tmp1+tmp2;
  25.                       i++;
  26.                    }
  27.                         if(lcdltdc.pwidth!=0)lcdbuf[lcddev.width-x-1]=color_map[i];                //±£′???é??μμ?lcdbuf
  28.                         else LCD->LCD_RAM=color_map[i];//????μ??á??
  29.                }
  30.                 if(lcdltdc.pwidth!=0)LTDC_Color_Fill(0,y,lcddev.width-1,y,lcdbuf);        //DM2Dì?3?
  31.                
  32.         }
  33. }

复制代码

但是原子的两个工程看上去是区分了打开硬件FPU与关闭FPU的两个工程,但实际上都是打开的,运行时的时间都是近似的。

也看了下工程配置,的确是都是打开的状态。



在操作上要注意,Key2的按下时间要长一点,好像并不是觖发式的。

先看一下打开硬件FPU时的运行





再看一下关闭硬件FPU的运行。





可以看到在打开硬件FPU时,运算时间是快了将近10几倍的。



STemWin
STemWin
STemWin

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top