|
本帖最后由 hzpyl 于 2017-5-22 09:28 编辑
用IAR开发MSP430,64位除法,占时太长,对低功耗不利
MSP430时钟4.9152MHZ
下面一个除法,占时1.5ms
一个余数,占时1.1ms
有没有好办法?
u32 heat_power(u32 dt, u32 *dtl, u16 tmper_drop)
{
u64 temp64;
u32 temp32A, temp32B;
temp64 = (u64)dt *tmper_drop *5015 ; // 运行330us
temp64 += *dtl; //加上上次的尾数(余数)
temp32A = temp64 / 2500000; // 运行1.5ms
temp32B = temp64 % 2500000; // 运行1.1ms
*dtl = temp32B; //保存尾数(余数)
return(temp32A);
}
补充:
用减法与乘法代替,求余数
temp32A = temp64 /2500000; // 运行1.5ms
temp32B = temp64 - (temp32A*2500000); // 运行0.05ms
补充:
修改注释:
//加上上次的尾数(余数)
//保存尾数(余数)
为了不使用浮点数,且尽可能提高精度,每次计算都保留余数,下次计算再加上余数。
|
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|