平时做浮点运算的开发时都是用的软浮点数(dsp的硬浮点数运算不熟悉没有接触过),特别是现场情况要求实时性高的话,软浮点运算的缺陷就会放大。看到飞凌的这款iMX6ULL本身带有FPU,支持VFPv4-D32。非常想评测下这个功能,下面就是我的评测过程。 首先在Ubuntu开发环境中设置环境变量,详细的命令如下。/opt/fsl-imx-x11/4.1.15-2.0.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi 当配置好环境变量后,如何知道是否使用硬浮点运算呢?按照飞凌提供的文档说明,使用命令arm-poky-linux-gnueabi-readelf -A test 就可以查看,如附件,这里只是简单说明一下,就是如果在执行前面这条指令后发现输出内容里有Tag_ABI_VFP_args: VFP registers ,就已经表明采用硬浮点了。 然后,编译要调试的程序,我的是test.c程序。命令如下: root@ubuntu:/home/forlinx/work# $CC -g test.c -o test。 贴上实验的代码: #include <stdio.h> int main() { float a = 0.3f, b=1.0f; long i; for(i=0;i <1000000000;i++) { a = a*b; a = a/b; a = a+b; a = a-b; } printf("success ok\n"); printf("%f\n", a * b); return 0; } 将生成后的test通过u盘拷贝到开发板根目录下,见附件显示。 注意:这段程序要求进行10亿次加减乘除运算(对软浮点运算的话够你打个盹的时间了~~)。 然后在开发板启动test程序,命令及结果如下(附件有截图): root@fl-imx6ull:/run/media/mmcblk1p1# ./test success ok 0.300000 通过多次执行程序,统计后的输出结果的运算时间为1分3秒。 这样的评测结果还是满意的,毕竟它的运行速度最高才800Mhz。在一些智能工业控制领域应用这个功能是可行的。 最后附上开发环境调试的过程,如附件通过调试命令能显示硬浮点运算。由于时间关系,更多的调试就不分享了,如果大家在调试过程遇到问题,欢迎留言。
|