登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

多面手Friendz的技术博客

光电子激光,机电,自动化,仪器 邮箱:friendztech(a)163.com

 
 
 

日志

 
 

刚测试了PIC32微处理器的速度,比PIC18系列8位单片机快100倍  

2011-03-16 21:53:43|  分类: 电子技术 激光技 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

 由于有个课题需要高速计算三角函数和浮点乘除法,用了常用的PIC18系列单片机进行了测试,很失望,虽然有硬件乘法器,每秒也只能进行约1000次三角运算,是用sin函数和atan函数测试的。

 

今天试了PIC32系列,用的是MICROCHIP PIC32 START KIT系列的开发板DM320004,单片机型号是 PIC32MX795F512L ,测试的结果不错,在循环 100,000 次时,指示灯大约每秒切换一次。为了验证是不是因为计算同一个数值,计算过程给优化掉了,又改动了程序:

 

int main(void)
{

    // Configure the device for maximum performance, but do not change the PBDIV clock divisor.
 // Given the options, this function will change the program Flash wait states,
 // RAM wait state and enable prefetch cache, but will not change the PBDIV.
    // The PBDIV value is already set via the pragma FPBDIV option above.
    SYSTEMConfig(SYS_FREQ, SYS_CFG_WAIT_STATES | SYS_CFG_PCACHE);

    // LED setup
    // Turn off leds before configuring the IO pin as output
    mPORTDClearBits(BIT_0 | BIT_1 | BIT_2);            
// same as LATDCLR = 0x0007

 // Set RD0, RD1 and RD2 as outputs
    mPORTDSetPinsDigitalOut(BIT_0 | BIT_1 | BIT_2 );   
// same as TRISDCLR = 0x0007

 //Initialize the DB_UTILS IO channel
 DBINIT();
 
 // Display a message using db_utils
 DBPRINTF("Welcome to the PIC32 Blink Leds example. \n");
 DBPRINTF("The build date and time is ... (" __DATE__ "," __TIME__ ")\n");
 DBPRINTF("This example demonstrates a simple method to toggle LEDs. \n");

    // endless loop

 dbl_Cacu_Data = 1.1;
 
    while(1)
    { 
       iii = 10000000;
       while (iii > 0){
       dbl_Cacu_Data = atanf(3.1415926 / (float)iii);     // 测试了sin(3.1415926 / (float)iii)  也是一样的快
       iii --;
  } 
      //DelayMs(100);
   mPORTDToggleBits(BIT_0);     // toggle LED0 (same as LATDINV = 0x0001)
 
   //DelayMs(100);
   //mPORTDToggleBits(BIT_1);     // toggle LED1 (same as LATDINV = 0x0002)
 
   //DelayMs(100);
   //mPORTDToggleBits(BIT_2);     // toggle LED2 (same as LATDINV = 0x0004)
   
    }
   return 0;
}

 

这样可以使每次计算的数值不同,使循环无法倍优化。

先后用了sin和atan测试,结果都是100000次一秒钟,不错,可以用来进行三维姿态反解计算一类的课题了。

  评论这张
 
阅读(1119)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018