64字节的数组code要前面插入一个字节怎么写最好?

2020-01-23 14:28发布

是这样的,想套用写好的标准的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内如何实现这个目的?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
16条回答
bbglx
1楼-- · 2020-01-23 16:51
首先你要有一个65字节的数组。。
bias
2楼-- · 2020-01-23 19:04
数组不占用内存,是code
yyts
3楼-- · 2020-01-23 20:04
发64字节数据之前先发一下地址不行吗?
bias
4楼-- · 2020-01-23 22:52
 精彩回答 2  元偷偷看……
eiglxl
5楼-- · 2020-01-23 22:55
数组code 是无法赋值的,只可读不可写。
yyts
6楼-- · 2020-01-24 02:39
bias 发表于 2014-7-23 20:22
是可以,但是这样就不方便调用i2c的模块,要自己分开写。

i2c上面挂了很多不同的模块吗?

一周热门 更多>