搞定
这是用指针的代码- /*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;
是不是因为我指针使用的有问题,书上不是说使用指针程序执行速度回提高吗?
|