项目需要对三角函数进行计算,恰好g431有硬件cordic,配置了下,并针对特定函数做了封装,封装好的一部分函数
试着做一下对比,看看计算性能可以提升多多少,结果还挺令人吃惊的
一、CORDIC VS math库中通用函数
与math库中最常见的sin、cos、atan2等函数做对比,计算100次
结果表明,在正弦余弦反正切中,cordic计算速度是math库的10倍左右,当然还可以做提升,我在函数里调用了很多数据标准化函数,如果直接将相关代码写到函数中,计算速度还可以提升
但是在执行开根号操作时,cordic竟然比math库的sqrt慢了一倍,不知道是不是我写的代码有问题
二、CORDIC VS math库中针对float数据操作的函数
发现这个完全是个意外,今天试了用vscode打开keil工程进行编写,在打出sin函数时,后面跳出了很多相关函数的提示,其中包含了sinf(),查了一下貌似是专门针对float型数据进行运算的,就想着也测试下
同样计算100次,但是cordic竟然慢了2-5倍
三、end
当然我觉得这是个人问题吧,第一次使用cordic,不确定是否配置正确,还有就是采用等待的方式读取,也增加了计算时间,如果数据量大采用中断或者dma查询的方式,速度应该会有很大提升
不说了,忙了两天,做对比之后,还是老老实实用math库函数吧