打印

求助:这个函数占用运行时间太长的原因!!!

[复制链接]
2093|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yayayalail|  楼主 | 2011-6-26 14:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void deal_data(u8 *a,u8 *b)
{
u8 i,j;
  
for(j=0;j<15;)
{
  b[j]=0;
  b[j+1]=0;
  for(i=0;i<8;i++)
  {  
    b[j] |= ((a[7-i]<<(j/2))&bit7)>>i;     
    b[j+1] |= ((a[15-i]<<(j/2))&bit7)>>i;
  }
  j+=2;
}
}
沙发
香水城| | 2011-6-27 11:07 | 只看该作者
原因是运算量太大。

使用特权

评论回复
板凳
无冕之王| | 2011-6-28 10:46 | 只看该作者
运算量的确很大

使用特权

评论回复
地板
hjiongh| | 2011-6-28 11:15 | 只看该作者
优化一下吧

使用特权

评论回复
5
airwill| | 2011-6-28 22:41 | 只看该作者
呵呵, 要执行 64 次循环. 是有点大.
看里面的循环:
for(i=0;i<8;i++)
  {  
    b[j] |= ((a[7-i]<<(j/2))&bit7)>>i;     
    b[j+1] |= ((a[15-i]<<(j/2))&bit7)>>i;
  }
是否可以考虑用局部变量来代替 b[j],b[j+1],  避免过度读写 RAM.

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
yayayalail + 1
6
winloop| | 2011-6-28 22:54 | 只看该作者
楼主估计没用过汇编,只关注了C语句的长度,b[j] |= ((a[7-i]<<(j/2))&bit7)>>i;,这一句,就比几十句普通C语句执行时间要长

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

18

帖子

1

粉丝