打印
[Kinetis]

如何使能Kinetis K64 Cortex-M4F内核的FPU功能

[复制链接]
2355|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
energy1|  楼主 | 2015-3-20 10:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

FPU即浮点运算单元是M4的一大特色亮点,虽然这个模块在ARM Cortex-M4内核中是一个选配,不过飞思卡尔最新的M4产品几乎都把FPU功能加进去了,毕竟没增加多少钱,而且还多了一个亮点,何乐而不为呢,呵呵。虽然加入了这个FPU会提高一定的浮点运算性能,但是具体使用中还是有些需要注意的地方,下面我简单聊聊,各位看官且瞧且珍惜,呵呵…

    我以IAR下K64的代码为例介绍使用FPU的功能的方法,准备如下:

测试平台:FRDM-K64

开发环境:IAR

例程代码:K64F120M_IAR_Sample_Code\build\iar\hello_world

1. 首先需要配置IAR的编译器,在Options->General Options->Target选项卡中,打开FPU功能即选中VFPv4,即告诉编译器,该芯片平台自带FPU功能,对浮点变量的运算尽量使用FPU的运算指令;


相关帖子

沙发
energy1|  楼主 | 2015-3-20 10:01 | 只看该作者

2. 上一步是对IAR进行了配置,但是ARM Cortex-M4内核上电默认是把该FPU的权限是关闭的(如下图,M4内核默认是禁止访问FPU的),所以造成了一种冲突,即IAR编译器把FPU相关的指令分配给浮点运算,但是内核部分却没有把这个权限打开,所以如果只配置了第一步,然后在程序里使用了浮点运算则会引起芯片的硬件错误(Hard fault),所以在程序最开始的地方需要配置M4内核寄存器CPACR,打开对FPU的访问权限,如下图:


使用特权

评论回复
板凳
energy1|  楼主 | 2015-3-20 10:02 | 只看该作者

3. 在主函数中定义并赋值浮点型变量,编译并下载到K64,进入调试环境查看反汇编窗口,可以看到带有浮点操作的指令都是前面带'v’的FPU专用指令,这样FPU就并利用起来的,至于具体FPU的performance我没有测,以后有时间找个好用的方法测试一下。

    好了,不早了,这部分就写到这了,图多文字少了点,主要是我觉着这个东西还是看图比较直接些,一下就明白了


使用特权

评论回复
地板
vigous1| | 2015-3-20 10:17 | 只看该作者
学习使用Kinetis K64 Cortex-M4F内核的FPU功能

使用特权

评论回复
5
FSL_TICS_ZJJ| | 2015-4-10 14:41 | 只看该作者
非常感谢你关于Kinetis的经验分享 !

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

94

主题

422

帖子

10

粉丝