查看: 6300|回复: 11

[原创] 【K64学习笔记】FPU

[复制链接]
  • TA的每日心情
    慵懒
    2019-7-22 13:56
  • 签到天数: 38 天

    连续签到: 1 天

    [LV.5]常住居民I

    20

    主题

    644

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1820
    最后登录
    2020-10-13
    发表于 2017-2-9 01:53:09 | 显示全部楼层 |阅读模式
    本帖最后由 邹姆斯特朗 于 2017-2-12 09:43 编辑

           小弟这几天在学习FRDM-k64f这块板子,在官网下了SDK2.0,自己学着建立了一个工程,用来测试FPU。我参照这个教程如何使能Kinetis K64 Cortex-M4F内核的FPU功能 ,写了简单的程序,计算100次的圆周率公式,利用SysTick计时,然后先是不开启FPU进行计算,在开启FPU计算,对比计数时间。似乎开启FPU之后,计算速度似乎没多大提升。所以想求教一下,是我的操作不对,还是效果本该如此?
    FPU.png


    FPU2.png



    这是我的测试代码

    1. int main(void)
    2. {
    3.       /* Board pin, clock, debug console init */
    4.     BOARD_InitPins();
    5.     BOARD_BootClockRUN();
    6.     BOARD_InitDebugConsole();
    7.     PRINTF("\r\n FPU 测试\r\n");
    8.    
    9.     SysTick_Config(SystemCoreClock / 1000);
    10.    
    11.     while(count--)//计算100次
    12.     {
    13.         double term=1.0,sum=0.0,pi;
    14.         int i=1;
    15.         do{
    16.             sum+=term;
    17.             i++;
    18.             term=1.0/(i*i);
    19.         }while(term > 1e-12);
    20.         sum*=6;
    21.         pi=sqrt(sum);
    22.     }
    23.    
    24.     printf(" FPU: %d\n",start);//计算完毕,打印时间


    25. }

    26. /*用于计时*/
    27. void SysTick_Handler ()
    28. {
    29.    start++;
    30. }
    复制代码
    Demo.rar (2.08 MB, 下载次数: 7)
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2021-9-9 22:51
  • 签到天数: 415 天

    连续签到: 1 天

    [LV.9]以坛为家II

    79

    主题

    3088

    帖子

    21

    金牌会员

    Rank: 6Rank: 6

    积分
    5181
    最后登录
    2022-5-23
    发表于 2017-2-9 09:24:52 | 显示全部楼层
    K64的FPU应该是单精度的,
    记得ATMEL 的SAMV71 是双精度的,STM32F7系列后期推出的也变成双精度的,前期的F7也该为单精度的,以此推断K64应该是单精度的。

    所以不妨你改成单精度的试一试,看看疗效如何!
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-9-17 19:57
  • 签到天数: 2310 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    107

    主题

    4270

    帖子

    1

    金牌会员

    Rank: 6Rank: 6

    积分
    10481
    最后登录
    2023-9-17
    发表于 2017-2-9 09:33:46 | 显示全部楼层
    开启FPU的设置在那里?没有看到
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2019-7-22 13:56
  • 签到天数: 38 天

    连续签到: 1 天

    [LV.5]常住居民I

    20

    主题

    644

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1820
    最后登录
    2020-10-13
     楼主| 发表于 2017-2-9 10:17:09 | 显示全部楼层
    ALTIUM2 发表于 2017-2-9 09:24
    K64的FPU应该是单精度的,
    记得ATMEL 的SAMV71 是双精度的,STM32F7系列后期推出的也变成双精度的,前期的 ...

    单精度?就是说还需要设置其他地方是吗
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2019-7-22 13:56
  • 签到天数: 38 天

    连续签到: 1 天

    [LV.5]常住居民I

    20

    主题

    644

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1820
    最后登录
    2020-10-13
     楼主| 发表于 2017-2-9 10:20:25 | 显示全部楼层
    shaoziyang 发表于 2017-2-9 09:33
    开启FPU的设置在那里?没有看到

    邵工好!程序里好像已经默认开启了,然后我还在IAR的工程设置里开启FPU功能,我是参考这个博客来操作的
    http://blog.chinaaet.com/jihceng0622/p/39733
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2021-9-9 22:51
  • 签到天数: 415 天

    连续签到: 1 天

    [LV.9]以坛为家II

    79

    主题

    3088

    帖子

    21

    金牌会员

    Rank: 6Rank: 6

    积分
    5181
    最后登录
    2022-5-23
    发表于 2017-2-9 10:43:32 来自手机 | 显示全部楼层
    我刚才查了下,试了下,应该是单精度的问题。
    k64支持的是单精度的浮点,而你定义的是double双精度的,所以可能快不了多少。
    我用单精度的浮点运算10000次,然后闪烁LED灯,会发现开启与不开启会至少两倍以上,肉眼观察的,没用用数据测。
    你把运行次数多一点,差距会更明显。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2021-9-9 22:51
  • 签到天数: 415 天

    连续签到: 1 天

    [LV.9]以坛为家II

    79

    主题

    3088

    帖子

    21

    金牌会员

    Rank: 6Rank: 6

    积分
    5181
    最后登录
    2022-5-23
    发表于 2017-2-9 10:46:13 来自手机 | 显示全部楼层
    你100次也太少了,本身程序执行就要时间的,误差会大
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2019-7-22 13:56
  • 签到天数: 38 天

    连续签到: 1 天

    [LV.5]常住居民I

    20

    主题

    644

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1820
    最后登录
    2020-10-13
     楼主| 发表于 2017-2-9 10:52:59 | 显示全部楼层
    ALTIUM2 发表于 2017-2-9 10:46
    你100次也太少了,本身程序执行就要时间的,误差会大

    明白了,我晚上回去试试,谢谢
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2017-1-24 08:47
  • 签到天数: 49 天

    连续签到: 1 天

    [LV.5]常住居民I

    0

    主题

    524

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1267
    最后登录
    2017-4-19
    发表于 2017-2-9 11:17:04 | 显示全部楼层
    都是牛人                     
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2019-7-22 13:56
  • 签到天数: 38 天

    连续签到: 1 天

    [LV.5]常住居民I

    20

    主题

    644

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1820
    最后登录
    2020-10-13
     楼主| 发表于 2017-2-11 19:49:35 | 显示全部楼层
    ALTIUM2 发表于 2017-2-9 09:24
    K64的FPU应该是单精度的,
    记得ATMEL 的SAMV71 是双精度的,STM32F7系列后期推出的也变成双精度的,前期的 ...

    问题解决了,确实是精度问题
    所有浮点数字后面加上f,要不然单精度运算隐式转换成了双精度运算了。这个时候就要在单精度数字后面加个f
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-18 01:15 , Processed in 0.111650 second(s), 29 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表