TI中文支持网
TI专业的中文技术问题搜集分享网站

arm内核态做浮点运算

为了能在内核态做浮点运算

先在Makefile添加

EXTRA_CFLAGS += -Wall -O0 -mfpu=neon -mfloat-abi=softfp -I. -lm -lrt

再把涉及浮点运算的代码用kernel_neon_begin/end括起来

但在编译时报错

drvmain.c:95:5: error: call to '__compiletime_assert_95' declared with attribute error: kernel_neon_begin() called from NEON code

请教该如何修正?

Yaoming Qin:

陈工,我跟您前面的沟通中说过,目前所有的arm 处理器的kernel不支持硬件的浮点,建议您把算法移到用户态中进行测试。

谢谢!

jianhui alvin:

回复 Yaoming Qin:

Hi, 那实际上,内核态,能否做浮点运算,不一定要硬件的浮点?

Richard.T:

回复 jianhui alvin:

能,但是一般没人会这么干, 浮点是app的工作, 内核代码中不应该存在浮点运算的代码. 内核默认使能软浮点. 谁会在内核中进行开方运算?内核本身就要求高效. 

jianhui alvin:

回复 Richard.T:

谢谢,内核确实不应该做浮点,我看到335x是带vfp,难道真不能把这个东西运用在内核浮点运算上面吗?

Jian Zhou:

回复 jianhui alvin:

我们的SDK的makefile默认应该是已经把vfp和neon的支持enable了,如果您的应用程序有浮点运算直接在编译选项里加上vfp或者neon的支持就可以了。

Yaoming Qin:

回复 jianhui alvin:

一般来说,内核不会做浮点,Linux的编译体系就不支持硬浮点,比较内核是做逻辑的地方。但是,我最近看了下,网上是有针对x86的内核硬浮点的补丁的,但针对ARM核的只有些参考文档,没有现成的补丁,即使自己动手,工作量不小,而且维护起来的成不不低。最后,还是建议在用户层进行浮点运算。

赞(0)
未经允许不得转载:TI中文支持网 » arm内核态做浮点运算
分享到: 更多 (0)