国民技术N32G031系列Flash数据存储

本文讨论了一个电源项目中的软件设计,涉及如何在掉电后保存4路输出的状态数据,通过高效利用Flash存储,减少擦除次数,以实现1280万次以上的状态更改。作者分享了具体实现方法和优化策略,欢迎进一步讨论改进方案。

最近在做一个电源项目软件,客户要求能够在掉电后保存一些数据,重新上电后能加载这些数据。数据内容只有一个字节,但每次写入时是4个字节。

具体的内容如下:

电源带有4路输出,上位机通过RS485能够控制这4路的通断,1:导通,0:断开,当上位机执行一次导通或关断操作时都要保存输出状态到Flash,如果相同的操作执行多次则只保存一次,例如:多次发送导通操作被视为是导通一次操作。

具体思路如下:

1、由于N32G031系列没有EEPROM,也没有其他外部存储器,只能使用ROM的一部分。N32G031总共有64K字节ROM,运行的程序只有十多K,空间还有很多;

2、使用片内Flash的一页来动态存储数据。Flash每页有512个字节,每4个字节写一次,则一页可以写入128次,整页写完,继续再写时才擦除页,重新从页的起始位置写入数据,如此反复,这样可以大大减小Flash页的擦除次数;

3、初始时从Flash页的指定位置读取数据(位置根据计算得到,就是找到第一个连续4个0xFF的位置),并存储在两个变量中A和B中,此时A和B中保存的数据是相同的,运行时如果上位机执行了导通和断开操作会改变B变量相关成员值,当while大循环检测到A和B的值不同时,则用B的值设置A变量,并根据计算的地址写入Flash页中。

程序主要代码如下:

结构体和联合体定义

struct STRUCT_OUTPUT_STATE{
	unsigned P1		:1;
	unsigned P2		:1;
	unsigned P3		:1;
	unsigned P4		:1;
	unsigned AUX	:1;
	unsigned 		:1;
	unsigned 		:1;
	unsigned 		:1;
};

//u
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值