小笨蛋 发表于 2012-11-15 17:17:14

ATMEGA168在8M的频率下一些计算话费的时间。天哪,太大了!

本帖最后由 小笨蛋 于 2012-11-15 18:05 编辑

double+double耗时18us
double-double耗时19us
double*double耗时20us
double/double耗时62us
int=int/int耗时30us
long-long耗时3.6us
long+long耗时3.6us
long+long耗时3.6us
long*long耗时9us
long+=(long)(atan2(ACCRol,ACCYaw)*100000);t耗时415us!!!!!!FUCK!!!!!!
long/=2耗时80us!!!!!!FUCK YOU TOO!!!
看来用long比double的综合性能稍微好一点啊。
哎,用AVR在8M下,飞控频率真的上不去啊。。

zenl0039 发表于 2012-11-15 17:19:31

8 位 ALU 表示 亚历山大~{:biggrin:}

zhanliana 发表于 2012-11-15 17:27:17

你要用数学的方法优化你的程序的。比如除以2要写成右移就会很快了。实在很佩服那些数学家。给c语言提供了很多支持,尤其那些数学函数。要不然还得自己用汇编来实现。

小笨蛋 发表于 2012-11-15 17:41:46

zhanliana 发表于 2012-11-15 17:27 static/image/common/back.gif
你要用数学的方法优化你的程序的。比如除以2要写成右移就会很快了。实在很佩服那些数学家。给c语言提供了很 ...

本人比较菜,不敢乱搞。以前这样出问题怕了(至少不敢在四轴上实验)。ullong貌似要是负的好像还不能移位

jimmy_xt 发表于 2012-11-15 18:01:17

zhanliana 发表于 2012-11-15 17:27 static/image/common/back.gif
你要用数学的方法优化你的程序的。比如除以2要写成右移就会很快了。实在很佩服那些数学家。给c语言提供了很 ...

除2不需要写成右移,编译器这点优化都做不了的话,赶紧换掉好了。

我们平时说的数学方法优化,基本上都是建立在允许产生误差基础上的,这个编译器就弄不来了。

jimmy_xt 发表于 2012-11-15 18:03:21

用STM32吧,这样的计算搞个带FPU的CM4比较好。
mega16就一个8位整数乘法器+8位ALU,算浮点、长整型啥的太难为它了。

小笨蛋 发表于 2012-11-15 18:05:03

jimmy_xt 发表于 2012-11-15 18:01 static/image/common/back.gif
除2不需要写成右移,编译器这点优化都做不了的话,赶紧换掉好了。

我们平时说的数学方法优化,基本上都 ...

我用的是GCC啊,不会有问题的吧
页: [1]
查看完整版本: ATMEGA168在8M的频率下一些计算话费的时间。天哪,太大了!