|
前些年做项目积攒了一些 AVR 的开发板,简单的采样、发波什么的用的一直挺顺手。
最近做了一批 WS2812 的驱动,写了些颜色渐变效果,结果用到三角函数时,发现开始坑爹。
最开始是用 AvrStudio 仿真时发现三角函数转一会就转不动了,后来用 M64 实物运行,串口上传计算结果,才发现果然存在问题。
--------------------------------------------------------------------------------------------------------
漏洞表现为:sin/cos 的定义域(自变量范围)被限制在了 -4π~+4π 之间。
以前在 VC 当中用三角函数时,没出现过这种情况(类似颜色发生器也没有爆掉)。
测试平台:ATMEGA64A,PC串口
测试环境:ICCAVR v7.22
测试函数:sin(x), cos(x), tan(x). ("math.h")
测试结果:坑爹的漏洞
相关附件:
(测试项目+原始数据)
(数据曲线)
--------------------------------------------------------------------------------------------------------
M64是常规的 AVR 内核,如果数学库存在这个漏洞的话,估计低端的 MEGA 系列都跑不掉(所以TINY也别随便搞数学库了,查表多好)。
好在 AVR 本来就不是什么高端单片机,真心用到三角函数时大多是要查表来做的,也就没那么些烦心事了。 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|