程序使用了定时器 3做为时间统计功能,用于统计 Julia分形算法的运算时间。
如下,定时器3最大定时时间。
- tiM3_Init(65535,10800-1);
其他外设的程序在之前的帖子中已经分析过了,这里不再赘述了。
Julia分形算法原子的例程有两个,一个是打开FPU的一个是关闭FPU的,通过宏定义可以在LCD上显示。
主要的Julia分形算法函数如下:
- 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
- {
- for(x=0;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
- {
- 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++;
- }
- if(lcdltdc.pwidth!=0)lcdbuf[lcddev.width-x-1]=color_map[i]; //±£´æÑÕÉ«Öµµ½lcdbuf
- else LCD->LCD_RAM=color_map[i];//»æÖƵ½ÆÁÄ»
- }
- if(lcdltdc.pwidth!=0)LTDC_Color_Fill(0,y,lcddev.width-1,y,lcdbuf); //DM2DÌî³ä
-
- }
- }
但是原子的两个工程看上去是区分了打开硬件FPU与关闭FPU的两个工程,但实际上都是打开的,运行时的时间都是近似的。
也看了下工程配置,的确是都是打开的状态。
在操作上要注意,Key2的按下时间要长一点,好像并不是觖发式的。
先看一下打开硬件FPU时的运行
再看一下关闭硬件FPU的运行。
可以看到在打开硬件FPU时,运算时间是快了将近10几倍的。