STM32系统保存参数到eeprom的实现方法

1 ini.c

#include 
#include "stm32f10x.h"
#include "string.h"
#include "EEPROMDrv.h"
#include "ini.h"

//define the memory map in EEPROM

#define IniStartAddress 		0
#define IniMaxSize 			200

/*				EEPROM
0________200________________________________________________________________64K
|         | 								    |
|INI	  | 				OTHERS				    |
|_________|_________________________________________________________________|
*/

//---------------Declare variable---------------
//Eeprom is initialized
const uint8_t Var1_Len = 2;
uint8_t Var1_EepromIsInitialized[Var1_Len]			= {0};
const uint8_t Var1_Default[Var1_Len] = {0x55, 0x11};

//start
const uint8_t Var2_Len = 1;
uint8_t Var2_Contrast[Var2_Len] 					= {0};
const uint8_t Var2_Default[Var2_Len] = {50};

const uint8_t Var3_Len = 1;
uint8_t Var3_KeyTone[Var3_Len] 						= {0};
const uint8_t Var3_Default[Var3_Len] = {0};

const uint8_t Var4_Len = 1;
uint8_t Var4_Language[Var4_Len] 					= {0};
const uint8_t Var4_Default[Var4_Len] = {0};

const uint8_t Var5_Len = 9;
uint8_t Var5_TerminalPassword[Var5_Len] 			= {0};
const uint8_t Var5_Default[Var5_Len] = {"123456"};

const uint8_t Var6_Len = 28;
uint8_t Var6_ServerAddress[Var6_Len] 				= {0};
const uint8_t Var6_Default[Var6_Len] = {"255.255.255.255,10245"};

const uint8_t Var7_Len = 15;
uint8_t Var7_ApnName[Var7_Len] 						= {0};
const uint8_t Var7_Default[Var7_Len] = {"cmnet"};

const uint8_t Var8_Len = 15;
uint8_t Var8_ApnId[Var8_Len] 						= {0};
const uint8_t Var8_Default[Var8_Len] = {0};

const uint8_t Var9_Len = 15;
uint8_t Var9_ApnPassword[Var9_Len] 					= {0};
const uint8_t Var9_Default[Var9_Len] = {0};

const uint8_t Var10_Len = 15;
uint8_t Var10_AdvancedMenuPassword[Var10_Len] 		= {0};
const uint8_t Var10_Default[Var10_Len] = {"000000"};

//...add your ini variable here, total length of Vars, do not more than MAXINIBUFFSIZE(200)

INI machine_ini[machine_ini_max] =
{
	//variable buff,							,The initial value of the buff

	//VarEepromIsInitialized;
	{Var1_EepromIsInitialized,					Var1_Default,	Var1_Len},

	//start
	//VarContrast;
	{Var2_Contrast,								Var2_Default,	Var2_Len},

	//VarKeyTone;
	{Var3_KeyTone,								Var3_Default,	Var3_Len},

	//VarLanguage;
	{Var4_Language,								Var4_Default,	Var4_Len},

	//VarTerminalPassword;
	{Var5_TerminalPassword,						Var5_Default,	Var5_Len},

	//VarServerAddress;
	{Var6_ServerAddress,						Var6_Default,	Var6_Len},

	//VarApnName;
	{Var7_ApnName,								Var7_Default,	Var7_Len},

	//VarApnId;
	{Var8_ApnId,								Var8_Default,	Var8_Len},

	//VarApnPassword;
	{Var9_ApnPassword,							Var9_Default,	Var9_Len},

	//VarAdvancedMenuPassword;
	{Var10_AdvancedMenuPassword,				Var10_Default,	Var10_Len},

	//...add yours as follow


};

uint8_t IniTempBuf[IniMaxSize] = {0};

void PrintBuf(const char *title, uint8_t buf[], uint16_t size)
{
	uint16_t i=0;

	printf("%s : ", title);	
	for(i=0; i#ifndef __INI_H__
#define __INI_H__

void Ini_Initialize (void);

void Ini_WriteToEerpom (void);

void Ini_ReadFromEeprom (void);

void Ini_RestoreToFactoryDefault (void);

int8_t Ini_CmpWithDefault(void);

typedef struct 
{
	//pointer
	uint8_t *Var;
	//if you are use the function "Restroe factory set", VarDefault -> Var
	const uint8_t *VarDefault;
	uint8_t VarLen;
}INI;


#define machine_ini_max 10

extern INI machine_ini[machine_ini_max];

//Item list
#define IniItem_EepromIsInitialized				0
#define IniItem_Contrast					1
#define IniItem_KeyTone						2
#define IniItem_Language					3
#define IniItem_TerminalPassword				4
#define IniItem_ServerAddress					5
#define IniItem_ApnName						6
#define IniItem_ApnId						7
#define IniItem_ApnPassword					8
#define IniItem_AdvancedMenuPassword				9

//IniItem_Language
#define lang_English 0
#define lang_Chinese 1


//user use as follow
#define gEepromIsInitialized					machine_ini[IniItem_EepromIsInitialized]
#define gContrast						machine_ini[IniItem_Contrast]
#define gKeyTone						machine_ini[IniItem_KeyTone]
#define gLanguage						machine_ini[IniItem_Language]
#define gTerminalPassword					machine_ini[IniItem_TerminalPassword]
#define gServerAddress						machine_ini[IniItem_ServerAddress]
#define gApnName						machine_ini[IniItem_ApnName]
#define gApnId							machine_ini[IniItem_ApnId]
#define gApnPassword						machine_ini[IniItem_ApnPassword]
#define gAdvancedMenuPassword					machine_ini[IniItem_AdvancedMenuPassword]



#endif


//底层需要提供对eeprom的操作函数
//EepromReadBytes(Addr, Buff, Size)
//EepromWriteBytes(Addr, Buff, Size)
int main(void)
{
//初始化ini
//实际操作是将参数从eeprom读到全局数组里面
//判断开始2个字节是否和default值相同,
//如果不相同,则可能是一片新的EEPROM芯片,
//调用 Ini_RestoreToFactoryDefault();
// Ini_ReadFromEeprom();
//恢复default值并写到eeprom,然后重新读出到全局数组


Ini_Initialize();


//修改参数的方法类似如下操作


//set to the new contrast
gContrast.Var[0] = 30;
//save to eeprom
Ini_WriteToEerpom();//实际操作是将全局数组里面的内容写到eeprom


}
 
  



你可能感兴趣的:(综合,ini,struct,function)