是这样的,想套用写好的标准的i2c函数,一组数据前面需要插入一个地址然后打包用i2c发送,
怎么样才能最方便的实现这个目的?
i2c(u8 *ptr,u8 length);
u8 code a[64]={...........};
send_data(u8 *p,u8 length)
{
int i;
for(i=length-1;i>=0;i--)
{
*(p+i+1) = *(p+i);
}
*p = 0x40; //把Address地址加到首位
i2c(p,length+1);
}
send_data(a,64);
这样写不报错,但是实现不了目的
其中*p = 0x40;这样赋值是不是不对,需要b=0x40,p=&b才可以;
后来这样修改了一下,
send_data(u8 *p,u8 length)
{
int i;
u8 *p1;
for(i=0;i<length;i++)
{
*(p1+i+1) = *(p+i);
}
*p1 = 0x40; //把Address地址加到首位
i2c(p,length+1);
}
结果在for那里死循环,i的数值竟然会减小,后来终于想起来这样两个指针都是64个数字,那内存不够用,重叠了.
还好我用的stc,最后改成这样才ok
send_data(u8 *p,u8 length)
{
int i;
u8 xdata b[256]
for(i=0;i<length;i++)
{
b[i+1]=p[i];
}
b[0] = 0x40; //把Address地址加到首位
i2c(b,length+1);
}
如果没有xdata扩展的内存,在普通51内如何实现这个目的?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
其实i2c函数的设计,有没有必要用数组?可以做成只发送字节,由调用者决定是否采用缓存,否则对小内存单片机可能是无法完成的任务。
还没想到有什么好的办法。
一周热门 更多>