搞定
这是用指针的代码/*sbuf1初始化*/
void sbuf_init()
{
u8 i=0;
u8 *p;
for(p=seg[0];p<seg[0]+32;p++)
{
sbuf[i]=p;
sbuf[i]=(sbuf[i]<<8)|(*(++p));
i++;
}
}
/*更新缓冲区数据*/
void sbuf_update()
{
u8 i,*p,*q;
u16 temp0,temp1;
static u8 m=0; //存储左移字数
static u8 n=0; //存储左移次数
if(m>25) m=0; //最后一个字已移出,左移次数清0
else if(m==25) //最后一个字已移入,开始移入第一个字
{
p=seg[m];
q=seg[0];
}
else
{
p=seg[m]; //确定要显示字的位置
q=seg[m+1];
}
if(n<16)
{
i=0;
for(p;p<&seg[m]+32;p++)
{
temp0=temp1=0; //中间变量清零
temp0=temp0|(*p);
temp0=(temp0<<8)|(*(++p)); //将前一个字代码赋给temp0
temp1=temp1|(*q);
temp1=(temp1<<8)|(*(++q)); //将后一个字代码赋给temp1
sbuf[i]=(temp0<<n)|(temp1>>(16-n)); //合成要显示的代码
// dat0=sbuf[i]; 测试代码
q++;
i++;
}
n++; //移位次数+1 ;
}
else //上一字已完全移出
{
m++; //左移字数加1
n=0; //移位次数清0
sbuf_update(); //重新加载缓冲区字模
}
}
我测试了下
使用指针时第一次调用sbuf_update用时5.358ms;占用date=58,xdate=0,code=1557;
不使用指针时第一次调用sbuf_update用时5.241ms;占用date=52,xdate=0,code=1717;
是不是因为我指针使用的有问题,书上不是说使用指针程序执行速度回提高吗? |