非易失存储管理应用 在单片机开发中,往往需要实现数据的非易失存储。所谓非易失存储,就是数据改写后在掉电后仍然能保持。哪些是非易失存储介质呢?比如EEPROM,FLASH等都属于非易失存储介质。 比如一个产品里面有很多各种各样的参数,且分布在各个子系统文件中。举个栗子: /*模块A中有这样一个结构体需要非易失存储*/
typedef struct _t_paras{
int language;/*语言种类*/
char SN[20]; /*产品序列号*/
}T_PARAS;
T_PARAS sysParas;
/*模块B中有这样一个结构体需要非易失存储*/
typedef struct _t_pid{
float kp;
float ki;
float kd;
float T;
}T_PID;
T_PID pidParas;
面对这样一个需求,要实现非易失存储,我在将底层的EEPROM/FLASH读写函数实现的基础上,将上述应用数据按照一定顺序存储管理。那么更为理想的方式是什么呢?设计一个模块专门负责存储非易失数据。比如: typedef struct _t_nv_layout{
void * pElement; /*参数地址*/
int length; /*参数长度*/
}T_NV_LAYOUT;
/*参数映射表*/
T_NV_LAYOUT nvLayout[]={
{&sysParas,sizeof(T_PARAS)},/*参数映射记录*/
{&pidParas,sizeof(T_PID)},
...
};
/*参数映射表记录条数*/
#define NV_RECORD_NUMBER (sizeof(nvLayout)/sizeof(T_NV_LAYOUT))
void nv_load(T_NV_LAYOUT *pLayout,int nvAddr,int number);
void nv_store(T_NV_LAYOUT *pLayout,int nvAddr,int number);
|