stc单片机读写EEPROM,我要写一个数组,数组很大,怎么样能很快的一下就能读出其中的值,比较快,
3个回答
展开全部
有几点建议:
1.一般的EEPROM有两种接口:I2C和SPI,并行的反正我没用过。如果是I2C一般情况下有100KHz和400KHz,当然还有1MHz甚至更高的(例如Ramtron的FM系列铁电存储器),所以只要可能,要选择通讯速率尽量高的EEPROM,或者在不影响通讯成功率的情况下,尽量提高一些通讯速度。方法一适当减小上拉电阻值以提高上下沿变化速度;二是优化底层的驱动代码,尽量做到能不延时的不延时(通过查看汇编代码仔细计算时钟数)。
2.由于EEPROM的共性,一次写操作完成最后要延时5ms左右让数据写入单元中,但是不是每写一个字节都要延时呢?不是的。EEPROM可以连续写,例如16字节(具体大小要看你的EEPROM型号),这样就可以写入16字节后只延时5ms,不但节省了15个START、STOP和写地址,还节省了15个5ms,大大加快了写的过程!
3.虽然EEPROM读可以不需要延时,但通过连续读,也可以省去一些I2C总线寻址的时间。
4.如果你是想写进EEPROM后立刻读出,则可能通过小间隔时间连续测试I2C设备是否就绪的方法,而不是延时的方法判断EEPROM是否已经写入的芯片,从而又节省一些时间。
5.由于连续写和连续读,所以需要一定量的缓冲区,根据你的单片机RAM、数据量、EEPROM可以连续读、写的大小合理地选择缓冲区。
另外.如果你是用STC单片机内部的EEPROM功能,这就不是太好处理了。它实际上是用它内部的Flash来模拟EEPROM,所以带有一些FLASH的影子在里面(例如有扇区擦除,只能将1写成0等)。这方面要快速读写可以参照STC的数据表中例程说明进行优化。
1.一般的EEPROM有两种接口:I2C和SPI,并行的反正我没用过。如果是I2C一般情况下有100KHz和400KHz,当然还有1MHz甚至更高的(例如Ramtron的FM系列铁电存储器),所以只要可能,要选择通讯速率尽量高的EEPROM,或者在不影响通讯成功率的情况下,尽量提高一些通讯速度。方法一适当减小上拉电阻值以提高上下沿变化速度;二是优化底层的驱动代码,尽量做到能不延时的不延时(通过查看汇编代码仔细计算时钟数)。
2.由于EEPROM的共性,一次写操作完成最后要延时5ms左右让数据写入单元中,但是不是每写一个字节都要延时呢?不是的。EEPROM可以连续写,例如16字节(具体大小要看你的EEPROM型号),这样就可以写入16字节后只延时5ms,不但节省了15个START、STOP和写地址,还节省了15个5ms,大大加快了写的过程!
3.虽然EEPROM读可以不需要延时,但通过连续读,也可以省去一些I2C总线寻址的时间。
4.如果你是想写进EEPROM后立刻读出,则可能通过小间隔时间连续测试I2C设备是否就绪的方法,而不是延时的方法判断EEPROM是否已经写入的芯片,从而又节省一些时间。
5.由于连续写和连续读,所以需要一定量的缓冲区,根据你的单片机RAM、数据量、EEPROM可以连续读、写的大小合理地选择缓冲区。
另外.如果你是用STC单片机内部的EEPROM功能,这就不是太好处理了。它实际上是用它内部的Flash来模拟EEPROM,所以带有一些FLASH的影子在里面(例如有扇区擦除,只能将1写成0等)。这方面要快速读写可以参照STC的数据表中例程说明进行优化。
展开全部
读数值,其实只有几种方式,
一种就查表,一种就用指针,
用指针会快点,你可以将这个很大的数组变为一个二维或三维或多维数组,
然后建立一个指针数组来对应相关的地址,
只要你很快地计算出指针的地址,立刻就读出来了.
一种就查表,一种就用指针,
用指针会快点,你可以将这个很大的数组变为一个二维或三维或多维数组,
然后建立一个指针数组来对应相关的地址,
只要你很快地计算出指针的地址,立刻就读出来了.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
数组很大?多大。很快?要求多快? 具体问题具体分析。
来自:求助得到的回答
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询