简单介绍CortexM4FPU单精度浮点运算单元.docx-Cortex-M4.docx

简单介绍CortexM4FPU单精度浮点运算单元.docx-Cortex-M4.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
简单介绍CortexM4FPU单精度浮点运算单元.docx-Cortex-M4.docx

Cortex-M4 PFU单元介绍近年,在Cortex-M3之后ARM公司又推出Cortex-M4内核,和之前的M3内核的区别之一就是M4带一个单精度浮点运算单元(PFU)。本文就FPU单元进行一个简单介绍,帮助工程师更快的理解FPU单元。Cortext-M系列内核的指令集从ARM公司发布的白皮书看,Cortex-M系列内核的指令集如下图所示:从上图可以看出,Corte-M系列的指令是向下兼容的,M0/M1的指令最少,M0/M1 和M3的指令都使用于M4的芯片。Cortex-M4的指令集分两部分,一部分是在M3的指令集外增加了一些扩展功能。另一部即上图中粉红色部分,就是用于FPU单元的单精度浮点运算指令。这部分指令都是用V-开头的汇编指令,仅在FPU功能被使能时使用。需要注意的是FPU单元是指的芯片上的一个独立于CPU处理的浮点运算单元,整个单元在大多数厂家的芯片中都是可以被使能和关闭的。相对于芯片,编译器也设置了相应的FPU功能开启/关闭的选项,在编译时需要告诉编译器是否开启FPU功能。编译器一旦开启FPU功能,在处理单精度浮点运算的语句时就会用带V-开头的汇编指令进行编译。如果编译器使能了FPU功能,而芯片未开启FPU单元,程序运行到浮点语句时就会出现异常。相反,如果编译器未使能FPU功能,芯片即使开启了FPU单元,程序还是会按照未使能FPU的代码进行处理。编译器中的FPU功能使能以KEIL为例,在创建一个CORTEX-M4的工程后,在工程的options for target “XXX” 窗口的Target页面中选择是否开启fpu功能。如下图所示: 编译器通过该选项来判断是否使用V开头的浮点运算指令。一旦选择“use FPU”功能,如果代码中带有单精度浮点运算的代码,编译器就会使用带V的FPU单元汇编指令,无论芯片是否开启了FPU单元功能。如果选择不使用FPU功能,即使芯片开启了FPU单元,编译器一样不会采用带V的汇编指令。3. 例程分析 下面用一个实例来分析开启、关闭FPU单元的程序处理。先上代码:001.static float fDat1 = 0.0;002.static float fDat2 = 0.01;003.//******************************************004.// fpu test.005.//******************************************006.int main(void)007.{008. int i;009. FPUEnable();010. FPUStackingEnable();011. for (i = 0; i 100; i++)012. {013. fDat1 = fDat1 + fDat2;014. }015.}其中011.~014. 行在开启编译器FPU功能后,编译出来的代码为:MOVSr0, #0x00VLDRs0, [r1,#0x04]VLDRs1, [r1,#0x00]ADDSr0, r0, #1CMPr0, #0x64VADD.F32s1,s1,s0VSTRs1, [r1, #0x00]BLF0中红色标注的都是以V-开头的汇编代码,这些代码在FPU单元中运行。如果关闭编译器的FPU功能,编译出来的代码如下:MOVSr4, #0x00LDRr6, [r5,#0x04]LDRr0, [r5, #0x00]MOVr1, r6BL.W__aeabi_fadd(0x0000029C)ADDSr4, r4, #1STRr0, [r5, #0x00]CMPr4, #0x64BLT 0中红色标注部分是程序执行浮点加法运算的部分,调用了单精度浮点运算的库函数。

文档评论(0)

magui + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8140007116000003

1亿VIP精品文档

相关文档