STM32系统保存参数到eeprom的实现方法
来源:互联网 发布:java xssfcellstyle 编辑:程序博客网 时间:2024/05/22 00:22
1 ini.c
#include <stdio.h>#include "stm32f10x.h"#include "string.h"#include "EEPROMDrv.h"#include "ini.h"//define the memory map in EEPROM#define IniStartAddress 0#define IniMaxSize 200/*EEPROM0________200________________________________________________________________64K| | ||INI | OTHERS ||_________|_________________________________________________________________|*///---------------Declare variable---------------//Eeprom is initializedconst uint8_t Var1_Len = 2;uint8_t Var1_EepromIsInitialized[Var1_Len]= {0};const uint8_t Var1_Default[Var1_Len] = {0x55, 0x11};//startconst 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<size; i++){printf("%02x ", buf[i]);}printf("\r\n");}void PrintBuf2(const char *title, const char *content, uint16_t i, uint8_t buf[], uint16_t size){printf("%s : ", title);printf(" %s %d, ", content, i);for(i=0; i<size; i++){printf("%02x ", buf[i]);}printf("\r\n");}void Ini_ReadFromEeprom (void){uint16_t i=0, j=0, k=0, m=0;memset(IniTempBuf, 0, sizeof(IniTempBuf));EepromReadBytes(IniStartAddress, IniTempBuf, IniMaxSize);//PrintBuf(__func__, IniTempBuf, 200);for(i=0; i<machine_ini_max; i++){m = machine_ini[i].VarLen;//printf("%s : i = %d, machine_ini[i].VarLen = %d\r\n", __func__, i, m);for(j=0; j<m; j++){machine_ini[i].Var[j] = IniTempBuf[k++];}//PrintBuf2(__func__, "machine_ini[i]=", i, machine_ini[i].Var, machine_ini[i].VarLen);}}void Ini_WriteToEerpom (void){uint16_t i=0, j=0, k=0, m=0;uint8_t ret = 0;memset(IniTempBuf, 0, sizeof(IniTempBuf));for(i=0; i<machine_ini_max; i++){m = machine_ini[i].VarLen;//printf("%s : i = %d, machine_ini[i].VarLen = %d\r\n", __func__, i, m);for(j=0; j<m; j++){IniTempBuf[k++] = machine_ini[i].Var[j];}//PrintBuf2(__func__, "machine_ini[i]=", i, machine_ini[i].Var, machine_ini[i].VarLen);}//PrintBuf(__func__, IniTempBuf, 200);ret = EepromWriteBytes(IniStartAddress, IniTempBuf, IniMaxSize);if(ret != 0)printf("%s : EepromWriteBytes return is %d\r\n", __func__, ret);}void Ini_RestoreToFactoryDefault (void){uint16_t i=0, j=0;for(i=0; i<machine_ini_max; i++){memset(machine_ini[i].Var, 0, machine_ini[i].VarLen);for(j=0; j<machine_ini[i].VarLen; j++){machine_ini[i].Var[j] = machine_ini[i].VarDefault[j];}PrintBuf2(__func__, "machine_ini[i]=", i, machine_ini[i].Var, machine_ini[i].VarLen);}Ini_WriteToEerpom();}void Ini_Initialize (void){Ini_ReadFromEeprom();//may be ini in eeprom have been change,//or it is a new chipif(strncmp((const char *)machine_ini[0].Var, (const char *)machine_ini[0].VarDefault, 2) != 0){Ini_RestoreToFactoryDefault();Ini_ReadFromEeprom();}}int8_t Ini_CmpWithDefault(void){uint16_t i=0, j=0;uint8_t ret = 0;for(i=0; i<machine_ini_max; i++){for(j=0; j<machine_ini[i].VarLen; j++){if(machine_ini[i].Var[j] != machine_ini[i].VarDefault[j]){printf("%s i=%d, j=%d\r\n", __func__, i, j);PrintBuf2(__func__, "machine_ini[i]=", i, machine_ini[i].Var, machine_ini[i].VarLen);ret = 1;//failed}}}return ret;}
ini.h
#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 {//pointeruint8_t *Var;//if you are use the function "Restroe factory set", VarDefault -> Varconst uint8_t *VarDefault;uint8_t VarLen;}INI;#define machine_ini_max 10extern INI machine_ini[machine_ini_max];//Item list#define IniItem_EepromIsInitialized0#define IniItem_Contrast1#define IniItem_KeyTone2#define IniItem_Language3#define IniItem_TerminalPassword4#define IniItem_ServerAddress5#define IniItem_ApnName6#define IniItem_ApnId7#define IniItem_ApnPassword8#define IniItem_AdvancedMenuPassword9//IniItem_Language#define lang_English 0#define lang_Chinese 1//user use as follow#define gEepromIsInitializedmachine_ini[IniItem_EepromIsInitialized]#define gContrastmachine_ini[IniItem_Contrast]#define gKeyTonemachine_ini[IniItem_KeyTone]#define gLanguagemachine_ini[IniItem_Language]#define gTerminalPasswordmachine_ini[IniItem_TerminalPassword]#define gServerAddressmachine_ini[IniItem_ServerAddress]#define gApnNamemachine_ini[IniItem_ApnName]#define gApnIdmachine_ini[IniItem_ApnId]#define gApnPasswordmachine_ini[IniItem_ApnPassword]#define gAdvancedMenuPasswordmachine_ini[IniItem_AdvancedMenuPassword]#endif
//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
}
- STM32系统保存参数到eeprom的实现方法
- Android 保存图片到系统图库 -- 利用 “系统保存屏幕截图” 的方法实现
- STM32的I2C-EEPROM
- 将图片保存到系统相册的两种方法
- 将图片保存到系统相册的两种方法
- STM32单片机内部EEPROM的读写
- Android 保存信息到系统通讯录的实现
- PHP抓取远程图片保存到本地的实现方法
- php实现上传图片保存到数据库的方法
- STM32系统学习——I2C (读写EEPROM)
- 保存到本地的方法
- Flash模拟EEPROM的方法
- php 下载保存文件保存到本地的两种实现方法
- 调用系统相机拍照,并且保存到系统相册一般的方法
- STM32之EEPROM读写
- STM32 FLASH模拟 EEPROM
- STM32——EEPROM
- STM32?I2C-EEPROM
- 几种获取mac地址的方法【转】
- Android目录结构(详细版)
- delphi指针
- C#除法的小数点问题
- LDD3 /scull 驱动实例在linux3.2.0编译实现
- STM32系统保存参数到eeprom的实现方法
- 智能指针实现方式
- 关于chrome中css由于content-type而没有被读出的困惑
- 消费者对团购的体验
- 关于c++ vs2008中数据断点的设置 .
- 一些美剧下载
- svn安装配置详细教程
- jQuery.cookie设置说明
- 【C++程序设计语言A视频教程 全12讲 中科院】【下载链接】