浮点型运算当然不如定点快,但是它精度高啊。
“I” =>integer(整数)"Q"=>quotient(商;系数)--小数
"I3Q5"=>三位整数,5位小数。
在IQmath库的数据类型表里面,可以清晰的看出来。
IQmath 库是一系列高优化和高精度的数学函数集合,移植浮点运算到定点代码中。在应用之前必须要设置好相应的变量的分辨率,否则会出现溢出的情况发生,相比于用标准ANSI C 编写的数学运算代码,采用IQmath 库的应用程序能得到较理想的运算速度,而且提升不少。
只需要在程序中添加#include "IQmath/IQmathLib.h",便可以调用Iqmath 库函数了,以下是IQmath 的一个例子。
/////////////////////////////////////////////////////////////////////////////////////////////////////////
#include "IQmath/IQmathLib.h"
int main(void)
{
_iq24 X, Y, Z
X = _IQ24(1.0)
Y = _IQ24(7.0)
Z = _IQ24div(X, Y)
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
IQmath 库中包含了5 组函数集:
1、 格式转换函数;
2、 算术函数;
3、 三角函数;
4、 常用的数学运算函数;
5、 其他。
我把数据量改小到2K*32了,然后把.cinit段存放的位置重新修改了下,就成功了。MEMORY
{
PAGE 0 :
/* BEGIN is used for the "boot to SARAM" bootloader mode */
BEGIN : origin = 0x000000, length = 0x000002 /* Boot to M0 will go here */
RAMM0 : origin = 0x000050, length = 0x0003B0
//观察了memory allocation,.cinit段用来存放初始化全局变量程序代码,内存用量非常大
//决定把RAML1-RAML3合并起来,用来存放.cinit段
//这样原来存放.text段的RAML1区改到RAML0区
//还有剩余的几个段:ramfuncs 、 .pinit等改到 RAML3的末尾
RAML0 : origin = 0x008000, length = 0x001000
RAML1 : origin = 0x009000, length = 0x002800
RAML2 : origin = 0x00B800, length = 0x000800
ZONE7A : origin = 0x200000, length = 0x00FC00/* XINTF zone 7 - program space */
CSM_RSVD : origin = 0x33FF80, length = 0x000076 /* Part of FLASHA. Program with all 0x0000 when CSM is in use. */
CSM_PWL: origin = 0x33FFF8, length = 0x000008 /* Part of FLASHA. CSM password locations in FLASHA*/
ADC_CAL: origin = 0x380080, length = 0x000009
RESET : origin = 0x3FFFC0, length = 0x000002
IQTABLES : origin = 0x3FE000, length = 0x000b50
IQTABLES2 : origin = 0x3FEB50, length = 0x00008c
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)