导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→请各位大侠帮忙,MCU中计算量太大的问题~[flyarrow]

 *第37985篇: 请各位大侠帮忙,MCU中计算量太大的问题~

  
楼 主:flyarrow 2006年2月25日11:20
 请各位大侠帮忙,MCU中计算量太大的问题~

最近被一个问题困扰,还请各位大侠帮忙

我在MCU里循环地做如下计算:
V*max(X,Y)/sqrt(X^2+Y^2),其中X、Y、V均是unsigned int

使用时发现循环周期长时还能算的过来,一旦循环周期短MCU就算不过来了,造成严重的停顿

请教各位大侠在MCU中对这种计算做优化有啥思路阿?Anything is appreciated~

非常感谢了!

  
2楼:戈卫东 2006年2月25日13:58
 把sqrt的计算转为查表
不知道你的ROM够否?
若你的 unsigned int 是16bit,这表有128kB那样大。
若是32bit则不能用查表法...32bit的机器计算sqrt应该没有困难.
  
3楼:戈卫东 2006年3月2日11:35
 唉...有误
16bit的unsigned int的sqrt只有8 bit,于是最多只需要64kB的表。

通常不需要覆盖0-65536的范围,这样就不需要64kB。

  
4楼:flyarrow 2006年2月25日15:03
 表的大小是怎么算的阿?
呵呵,先谢过这位热心的老兄了
unsigned int是16bit的,表的大小128kB是怎么算出来的阿?

V*max(X,Y)/sqrt(X^2+Y^2)中有三个自变量
我的理解是不管V了,对X和Y做查表操作,是这个意思吗?

//thanks :)

  
5楼:lenglianxi 2006年3月1日11:40
 随便说说
2楼所说的表是是128K的意思是,你需要0-65535个数据,每个数据是2个字节,所以128K了.
你程序的循环中还是要计算 X^2+Y^2 的值的.

如果你的精度只要求uint,而你又不想有64的表呢,有个折中的方法.
你每个表项用4个字节,就是2个uint.表项的索引就是开方后的结果,2个uint代表1个范围,在这个范围内的值开方出来的结果都是相同的.
这样你只需要256个表项,就是1024个字节.

但这样你需要花费比65336个表项的时间多.但比较调用sqrt()函数节约多了.


>>>>>>对该主题发表你的看法

本主题贴数5,分页: [第1页]


[上一篇主题]:小弟正在用PIC16C745做USB通信,有谁用过

[下一篇主题]:(付费!!!!)求台湾义隆单片机编程高手![原创]