由于缺少fp-operation单元,特定嵌入式系统上的libmath没有sin
和cos
等功能。
是否有一些库通过查找表提供功能?我实际上并不需要100%可靠的值。
答案 0 :(得分:2)
根据速度和精度的所需要求,您可以通过编写程序来创建查找表,从而创建简单查找表所需的功能。或者使用CORDIC。
答案 1 :(得分:2)
对于没有硬件浮点的目标,更好的方法可能是使用定点和CORDIC算法。
Anthony Williams'fixed-point maths library提供了fixed
数据类型的标准数学库的完整模拟,通常比软件浮点快5倍左右。同一目标。它是一个C ++库,但只要您的编译器支持C ++即使代码的其余部分不使用C ++特定功能也不应该成为问题。在大多数情况下,端口代码使用此库需要做的就是用fixed.hpp替换math.h并将类型关键字float
和double
替换为fixed
类型
答案 2 :(得分:1)
如果您的系统没有库提供sin / cos函数或内存中的查找表,则可以非常轻松地创建库。
下一个matlab函数将在c标题sin(x)
中为您提供myheader.h
([0,2 * pi]范围,2 * pi / 100步):
step=2*pi/100;
x=[0:step:2*pi];
y=floor(0.5 * 65535 * sin(x));
fd=fopen('myheader.h','wt');
fprintf(fd,'int16_t y[%d]={%g',length(y),y(1));
fprintf(fd,',\n %.9g',y(2:end));
fprintf(fd,'};\n');
fclose(fd);
标题如下所示:
int16_t y[101]={0,
2057,
4107,
6140,
8149,
10126,
12063,
13952,
15786,
17558,
19260,
20887,
22431,
23886,
25248,
26509,
27667,
28714,
29649,
30466,
31164,
31738,
32187,
32509,
32703,
32767,
32703,
32509,
32187,
31738,
31164,
30466,
29649,
28714,
27667,
26509,
25248,
23886,
22431,
20887,
19260,
17558,
15786,
13952,
12063,
10126,
8149,
6140,
4107,
2057,
-0,
-2057,
-4107,
-6140,
-8149,
-10126,
-12063,
-13952,
-15786,
-17558,
-19260,
-20887,
-22431,
-23886,
-25248,
-26509,
-27667,
-28714,
-29649,
-30466,
-31164,
-31738,
-32187,
-32509,
-32703,
-32768,
-32703,
-32509,
-32187,
-31738,
-31164,
-30466,
-29649,
-28714,
-27667,
-26509,
-25248,
-23886,
-22431,
-20887,
-19260,
-17558,
-15786,
-13952,
-12063,
-10126,
-8149,
-6140,
-4107,
-2057,
-0};
答案 3 :(得分:0)
Jack Ganssle有一篇关于优化嵌入式系统触发的文章:
答案 4 :(得分:0)
我认为提供这样一个库是没有意义的,因为与编写自己的难度相比,设计选择和参数设置太多了。我的意思是这些都不是很困难,但不能作为适合所有人的解决方案提供。
参数:
值
要求
方法