打印

麻烦各位帮我看看,领教了

[复制链接]
1184|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
海川先生|  楼主 | 2012-10-8 21:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 海川先生 于 2012-10-8 21:54 编辑

256字节的eeprom存储器(最初内容全0),每5个字节划分成一个块用来存贮一条信息(这条有效信息的首字节不是0)。存储前得先看看那个块是空白的,保证不能把原有的数据覆盖掉,所以有了下面的代码。
   我想找到一个空白块就马上退出循环,并返回空白块的首地址。但这段代码不能在找到一个空白块就立马退出,它实际运行50次,而我初始化EEPROM中的内容全是0,照我的想法这段代码的预期功能是,循环执行一次就退出并返回值为0,怎么改能做到呢
uchar search_blank()  //寻找空白存储空间
{
uchar i,head;
for(i=0;i<254;i+=5)
{
     read_1byte(i,head);//读出i地址空间中的数据送给head
     if(!head)//如果该字节数据为0,说明该字节为首的空间为空
     break;
}
return(i);
}

相关帖子

沙发
NE5532| | 2012-10-8 22:03 | 只看该作者
read_1byte(i,head)

函数定义有问题,C语言是形参传递,你在read函数里读到的值多半放在head里,这样是传不回调用函数的,你应该考虑这样

unsigned char read_1Byte (i);

或者

void read_1Byte(i, unsigned char* p)
{
//read
*p = read;
}

另外提醒楼主两件事,EEPROM初始化的“空”状态是FF,不是00,你还不如直接用FF判断,免得自找麻烦。另外注意看下这个E2是否分页,跨页写要注意处理,尽量每个页面一个记录,可以避免这种麻烦。

使用特权

评论回复
板凳
海川先生|  楼主 | 2012-10-9 11:05 | 只看该作者
2# NE5532
NE5532谢谢你的热心指点

使用特权

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

本版积分规则

17

主题

200

帖子

1

粉丝