有小伙伴提问,用于定点计算的IQmath和直接左移<<,右移>>哪个计算快?
一般IQmath是最早TI的C2000系列比较常见,现在ARM也可以移植IQmath。
对比两种方式最好的办法,是在同一款芯片上对比测试下。有可能不同的芯片会有不同的测试结果,今天就以LCM32F037,96MHz的内核M0为例。
测试时开关频率12kHz, 主频配置为72MHz。
测试方法是通过I/O口的翻转,来测试代码执行时间。一共测试了4种情况:
常数用IQmath移位,执行时间是398ns;
常数直接用<<移位,执行时间也是398ns;
变量直接用<<移位,执行时间372ns:
变量用IQmath移位,执行时间2.94us,这个有点出乎意料:
一般常用的都是TI的IQmath库,查看其头文件,其实IQmath的移位和直接移位是没区别的,所以执行时间就是接近的。
我理解,IQmath的优势应该是以下这些数学库,执行速度和精度有优势。
一般MCU是没有这些库的,厂家不配,就需要开发者自己去写,通过查表或者其他的方式了。
*********************************************
FOC项目开发,FOC技术培训,请扫码: