C语言定点数学
我熟悉Arduino编程工具,但对嵌入式编程的经验相对较少。当在Arduino中使用十进制数时,我从来没有遇到过任何问题,因此,当我最近开始使用TI的Launchpad F28069M(TMS320F28069M芯片)时,我惊讶地发现我的数学没有得到预期的结果。在做研究时,我意识到TI芯片有一个定点处理器,这可以解释为什么我的小数被截断为0。(请参阅简短的代码示例) 我的问题如下:C语言定点数学,c,fixed-point,C,Fixed Point,我熟悉Arduino编程工具,但对嵌入式编程的经验相对较少。当在Arduino中使用十进制数时,我从来没有遇到过任何问题,因此,当我最近开始使用TI的Launchpad F28069M(TMS320F28069M芯片)时,我惊讶地发现我的数学没有得到预期的结果。在做研究时,我意识到TI芯片有一个定点处理器,这可以解释为什么我的小数被截断为0。(请参阅简短的代码示例) 我的问题如下: 我应该如何在代码中声明十进制数 我应该使用TI的IQ数学吗 为什么我能够在Arduino中用十进制数声明和执行数学
Uint16 A;
main()
{
A = .25;
}
TI CCS中表达式窗口的结果:
请尝试使用以下代码:
float A;
main()
{
A = .25;
}
Uint16
是一个16位无符号整数(无小数…),所以有什么不清楚???…您有很多误解。Uint16不是一个普通意义上的定点类型。您试图将0.25(浮点)转换为16位整数,025只是四舍五入到0,而你在A
中得到了0,这是意料之中的。我感觉很糟糕,因为这个问题因为人们不理解固定点而被否决。定点数字是机器的整数,通常是现有整数类型的typedef
。对于初学者,我推荐TI的IQMath库。当您获得更多信息时,您可以查找IQMath源代码并使用一些较低级别的函数。IQMath API并不完美,例如,IQ_N_div函数不处理输入和输出不同的情况,但较低级别的实现会处理。