我当前正在使用Microchip的定点库,但是我认为这适用于大多数定点库。它支持Q15和Q15.16类型,分别为16位和32位数据。

我注意到的一件事是它不包括加,减,乘或除函数。

我应该怎么做?它像使用整数数学将它们相加/相减/相乘/相除一样简单吗?我可以看到加法和减法的工作原理,但是乘或除法不会处理小数部分...?

最佳答案

Microsoft库包括用于添加和减去处理下溢/上溢的函数(_Q15add和_Q15sub)。

乘法可以实现为汇编函数(我认为代码不错-这是从内存中获得的)。

C调用原型(prototype)是:

extern _Q15 Q15mpy(_Q15 a, _Q15 b);

该例程(放在项目中的.s源文件中)是:
.global _Q15mpy
_Q15mpy:
mul.ss w0, w1, w2        ; signed multiple parameters, result in w2:w3
SL w2, w2            ; place most significant bit of W2 in carry
RLC w3, w0           ; rotate left carry into w3; result in W0
return                        ; return value in W0

。结束

记住要包含libq.h

此例程对结果进行左移一位,而不是对结果进行右移15位。无需担心溢出问题,因为Q15数始终具有

关于fixed-point - 定点算法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4356635/

10-12 17:11