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

[复制链接]
3002|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 | 显示全部楼层
优化一下吧
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

查看全部评分

winloop 发表于 2011-6-28 22:54 | 显示全部楼层
楼主估计没用过汇编,只关注了C语句的长度,b[j] |= ((a[7-i]<<(j/2))&bit7)>>i;,这一句,就比几十句普通C语句执行时间要长
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

18

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部