打印

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

[复制链接]
2232|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 | 只看该作者

呵呵

没问题吧

使用特权

评论回复
5
makesoft| | 2008-11-12 20:58 | 只看该作者

buffer[n] = 0;

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

使用特权

评论回复
6
耕在此行|  楼主 | 2008-11-13 17:32 | 只看该作者

呵呵 不是哦

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

使用特权

评论回复
7
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]开始判断,而且读出的最高数据向后移了一位,那么永远不可能相同。
如此错误应该不是什么高级错误吧!属于不细心的错误

使用特权

评论回复
8
yewuyi| | 2008-11-13 23:11 | 只看该作者

写指令发完就立即读?

读什么?读大头鬼?

使用特权

评论回复
9
笑苍天| | 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;
    }
}

使用特权

评论回复
10
耕在此行|  楼主 | 2008-11-14 13:17 | 只看该作者

8楼

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

使用特权

评论回复
11
yewuyi| | 2008-11-14 15:29 | 只看该作者

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


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

使用特权

评论回复
12
耕在此行|  楼主 | 2008-11-14 16:32 | 只看该作者

楼上的

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

使用特权

评论回复
13
yewuyi| | 2008-11-15 10:06 | 只看该作者

延迟了多少啊?

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

使用特权

评论回复
14
gtw| | 2008-11-16 13:28 | 只看该作者

插播广告我就换台

使用特权

评论回复
15
耕在此行|  楼主 | 2008-11-16 18:50 | 只看该作者

呵呵 延时10mS够了吧

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

使用特权

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

本版积分规则

40

主题

1108

帖子

0

粉丝