bias 发表于 2014-7-23 19:41:58

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

是这样的,想套用写好的标准的i2c函数,一组数据前面需要插入一个地址然后打包用i2c发送,
怎么样才能最方便的实现这个目的?

i2c(u8 *ptr,u8 length);

u8 code a={...........};

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
        for(i=0;i<length;i++)
    {
            b=p;
    }
    b = 0x40;        //把Address地址加到首位
   
    i2c(b,length+1);
}





如果没有xdata扩展的内存,在普通51内如何实现这个目的?

bbglx 发表于 2014-7-23 19:59:33

首先你要有一个65字节的数组。。

bias 发表于 2014-7-23 20:06:28

数组不占用内存,是code

yyts 发表于 2014-7-23 20:21:15

发64字节数据之前先发一下地址不行吗?

bias 发表于 2014-7-23 20:22:46

yyts 发表于 2014-7-23 20:21
发64字节数据之前先发一下地址不行吗?

是可以,但是这样就不方便调用i2c的模块,要自己分开写。

eiglxl 发表于 2014-7-23 20:24:49

数组code 是无法赋值的,只可读不可写。

yyts 发表于 2014-7-23 20:25:52

bias 发表于 2014-7-23 20:22
是可以,但是这样就不方便调用i2c的模块,要自己分开写。

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

lcw_swust 发表于 2014-7-23 21:36:17

修改i2c函数即可

wmm20031015 发表于 2014-7-23 22:00:58

建立一个字节的临时数组{:lol:}

bias 发表于 2014-7-23 22:11:23

修改i2c是肯定可以的,但是为了模块化不想改动i2c

ludikn 发表于 2014-7-23 23:26:49

memmove(buffer+1, buffer, len);   buffer = new;

rain73 发表于 2014-7-24 04:19:38

都是code了还怎么赋值?那可不是内存。
其实i2c函数的设计,有没有必要用数组?可以做成只发送字节,由调用者决定是否采用缓存,否则对小内存单片机可能是无法完成的任务。

banyai 发表于 2014-7-24 08:14:15

本帖最后由 banyai 于 2014-7-24 08:26 编辑

还没想到有什么好的办法。

ALUMEI 发表于 2014-7-24 11:47:44

结构体!

ALUMEI 发表于 2014-7-24 11:49:08

如果你非要这样,数组和结构体是你不二的选择

bygreencn 发表于 2014-7-24 13:25:33

i2c(u8 *ptr,u8 length);

u8 code a={0,...........};
u8 * pu8Address = a;
u8 * pu8Code = a+1;
send_data(u8 *p,u8 length)
{
    *pu8Address = 0x40;
    memcpy( pu8Code ,p,length); //make sure of buffer size is larger than length+1
    i2c(code,length+1);
}
   

Vampireyifeng 发表于 2014-7-26 14:05:35

结构体啊
页: [1]
查看完整版本: 64字节的数组code要前面插入一个字节怎么写最好?