|
前些年做项目积攒了一些 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
阿莫论坛20周年了!感谢大家的支持与爱护!!
如果天空是黑暗的,那就摸黑生存;
如果发出声音是危险的,那就保持沉默;
如果自觉无力发光,那就蜷伏于牆角。
但是,不要习惯了黑暗就为黑暗辩护;
也不要为自己的苟且而得意;
不要嘲讽那些比自己更勇敢的人。
我们可以卑微如尘土,但不可扭曲如蛆虫。
|