二、使用K60的浮点运算单元。
对于内部有浮点运算单元的K60,不使用FPU就是一种资源浪费,所以要开启它。由于默认并没有开启FPU运算,所以这里还有点小小的麻烦。
退出调试状态,在菜单中选择file--Device Database...,打开器件数据库,找到 Freescale Semiconductor--MK60X256VMD100 双击,在Options:中第一行后面添加空格,后面加入FPU2,这一行的最后变为CPUTYPE("Cortex-M4") ESEL ELITTLE FPU2,点击Update,再点击close关闭。 这样这个器件就修改好了。(注:为了防止把数据库中的器件搞乱,可以自己新建一个分类,增加一个器件,把K60这个器件的内容统统拷进这个新建的器件里,再在这个器件里面修改其属性)
器件修改完以后,可以再新建一个Keil工程,跟前面一样,选择被修改过的K60,添加启动代码,添加上面的main函数。这时我们可以打开工程属性窗口,看里面的设置:
Project--Options for Target 'Target1'...(或者直接按Alt+F7),在Target选项卡中,在Code Generation区域可以找到Floating Point Hardware下拉框,默认选择了Use FPU.
工作还没有完成,cortex-m4在默认状态下寄存器并没有打开浮点运算,还要修改启动代码。在Reset_Handler函数中,找到 LDR R0, =__main 这个代码,在前面加入这几行:
; CPACR is located at address 0xE000ED88LDR.W R0, =0xE000ED88; Read CPACRLDR R1, [R0]; Set bits 20-23 to enable CP10 and CP11 coprocessorsORR R1, R1, #(0xF << 20); Write back the modified value to the CPACRSTR R1, [R0]
上面这段代码设定寄存器开启了浮点运算单元,否则在执行浮点运算代码时会发生HardFault。
重新编译,进入调试状态,这时可以发现生成的汇编代码跟原来的不一样了: