一种适合读取快写入慢的e2prom编程方式

本文探讨了在开发中遇到的E2PROM写入速度瓶颈问题,通过设计缓冲区和写入任务,实现按字节拆分写入,提升程序稳定性。作者分享了如何使用标志位跟踪待写入数据,以及在裸奔环境下实现高效E2PROM操作的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在开发i2c接口的e2prom时,发现一些e2prom读取速度很快,写入速度很慢(一个字节5ms),在编程的时候如果一次写入一长串数据,写入周期很长,程序是以固定时长为周期的循环工作方式,在有e2prom写入的周期,工作时间会超过设定的周期时长,影响整个程序运行的稳定性。

一种解决办法是上操作系统,但太麻烦了,还想采用裸奔的方式运行。此时需要将多个字节的写入拆分至多个周期内完成,每个周期最多只写入一个字节。最后采用的实现方式为:

定义一个e2prom缓冲区,每次先将数据写入缓冲区,使用写入标志位指示缓冲区中是否有新的数据写入。设计一个e2prom写入任务,每周期调用一次,每次从缓冲区中写入e2prom一个字节。

#define EEPROM_SIZE 128//e2prom字节数
unsigned char ee_bit_flag[EEPROM_SIZE / 8] = {0};//写入标志位
unsigned char ee_buffer[EEPROM_SIZE] = {0};//写入缓存区

int e2prom_task()
{

	int iWriteNum = 0;
	int i = 0;
	int j = 0;

	for(i = 0; i < sizeof(ee_bit_flag); i++)//检查是否有新数据写入
	{
		if(ee_bit_flag[i] != 0)
		{
			for(j = 0; j < 7; j++)
			{
				if((ee_bit_flag[i] & (1 << j)) != 0)//确定是哪个数据
				{
					WriteE2prom(i * 8 + j);//写入e2prom
					ee_bit_flag[i] &= ~(1 << j)//清除标志位
					iWriteNum = 1;
				}
			}
		}
	}
	return iWriteNum;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值