我的错误,大家分享(三)--E2校验程序

[复制链接]
1480|14
手机看帖
扫描二维码
随时随地手机跟帖
耕在此行|  楼主 | 2008-11-12 14:00 | 显示全部楼层 |阅读模式
程序设计思想为,先把所需写入的数写入E2,再读出来与被写入的数相比较,看是否每个数相等,如果不等,则再写一次,再比较,最多重复三次.
大家看看,这个程序有没错,如果错了那错在哪?
void    E2_Cwrite ( bin08 E2ad, bin08* RAMad, bin08 n )
{
    bin08 i;
    bin08 j=0;
    memcopy( RAMad,&buffer[0],n );
    do
    {
        buffer[n] = 0;
        for(i=n;i!=0;i--)
        {
            buffer[n] += buffer+0x55;
        }
        write_E2( E2ad, &buffer[0],(n+1) );
        read_E2 ( E2ad, &buffer[n+1],(n+1) );
        I2Cerr=0;
        for(i=n+1;i!=0;i--)
        {
            if (buffer != buffer[n+1+i])
            {
                I2Cerr=1;
            }
        }
        j++;
    }while ( (j<3)&& I2Cerr);
}

相关帖子

耕在此行|  楼主 | 2008-11-12 14:01 | 显示全部楼层

呵呵

晚上来看结果.

使用特权

评论回复
mymystery| | 2008-11-12 15:04 | 显示全部楼层

继续学习中~

使用特权

评论回复
耕在此行|  楼主 | 2008-11-12 16:10 | 显示全部楼层

呵呵

没问题吧

使用特权

评论回复
makesoft| | 2008-11-12 20:58 | 显示全部楼层

buffer[n] = 0;

很明显是数组越界了,最大成员是buffer[n-1]

使用特权

评论回复
耕在此行|  楼主 | 2008-11-13 17:32 | 显示全部楼层

呵呵 不是哦

你没看到数组定义,怎么能说数组越界呢?

使用特权

评论回复
benxiaoyu4| | 2008-11-13 23:02 | 显示全部楼层

正如楼主所说

for(i=n+1;i!=0;i--)
???
如果我理解的话这句应该是有问题的
i的初使直是不是应该为n
理解的write_E2( E2ad, &buffer[0],(n+1) );函数中参数的意义为E2ad 为写入的起使地址,&buffer[0]要写入数据的指针,n+1为写入的个数。同理read_E2同理。那么写入数据的最后一为应该是buffer[n] 而在for循环中却要从buffer[n+1]开始判断,而且读出的最高数据向后移了一位,那么永远不可能相同。
如此错误应该不是什么高级错误吧!属于不细心的错误

使用特权

评论回复
yewuyi| | 2008-11-13 23:11 | 显示全部楼层

写指令发完就立即读?

读什么?读大头鬼?

使用特权

评论回复
笑苍天| | 2008-11-14 08:53 | 显示全部楼层

昨天看好像还没错的,今天怎么变了

这里错了吧
for(i=n+1;i!=0;i--)  //昨天看这里i=n+1还是i=n的,所以说昨天没看出错来
{
    if (buffer != buffer[n+1+i])
    {
        I2Cerr=1;
    }
}

使用特权

评论回复
耕在此行|  楼主 | 2008-11-14 13:17 | 显示全部楼层

8楼

你没看到我写的程序,怎么能说写了就读呢,怎么和5楼一样哦?

使用特权

评论回复
yewuyi| | 2008-11-14 15:29 | 显示全部楼层

就扫了一眼看了这么多啊。。。


        write_E2( E2ad, &buffer[0],(n+1) );
        read_E2 ( E2ad, &buffer[n+1],(n+1) );

使用特权

评论回复
耕在此行|  楼主 | 2008-11-14 16:32 | 显示全部楼层

楼上的

 write_E2( E2ad, &buffer[0],(n+1) );
这个里面有延时的

使用特权

评论回复
yewuyi| | 2008-11-15 10:06 | 显示全部楼层

延迟了多少啊?

而且在一个函数里面‘傻傻的自己在那看月亮’不太妙啊。。。

使用特权

评论回复
gtw| | 2008-11-16 13:28 | 显示全部楼层

插播广告我就换台

使用特权

评论回复
耕在此行|  楼主 | 2008-11-16 18:50 | 显示全部楼层

呵呵 延时10mS够了吧

不读出来看,怎么知道写对了呢

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

1108

帖子

0

粉丝