saveorload.c
来自「基于c的电动机保护程序」· C语言 代码 · 共 191 行
C
191 行
#include "flash_extr.h"
#include "MOTOtype.h"
#include "UItype.h"
#include "SaveOrLoad.h"
#include "test.h"
void SaveValue(int);
void SaveSystemPara(void);
void LoadFromFlash(int);
extern _Value_Parameter Value_Parameter;
void SaveValue_Task(UNSIGNED argc, VOID *argv)
{
SaveValue((&SystemSetting)->SaveLoadNum);
}
void LoadValue_Task(UNSIGNED argc, VOID *argv)
{
int number;
int i = 0;
number = (&SystemSetting)->SaveLoadNum;
if(*(int *)(SAVE_Value_ADDR+ERASEBLOCKSIZE*number+4) != number)
{
(&SystemSetting)->SaveLoadNum = *(int *)0x20030000;
return;
}
//-------------存最新记录号 地址0x20030000---------
NorFlash_unlock(0x20030000 );
NorFlash_bolckerase(0x20030000);
do
{
NorFlash_write(0x20030000 + i*WordLen , ((U32)&number)+i*WordLen);
i++;
}while(i<2);
LoadFromFlash((&SystemSetting)->SaveLoadNum);
}
void SaveValue(int NumOfVal) //存整定值 从地址0x20006000开始,共三套,每页一套
{
int number = NumOfVal; //0,1,2
int size = 0;
int tempblockadd = 0; //当前块头地址
int i = 0;
tempblockadd = SAVE_Value_ADDR+ERASEBLOCKSIZE*number ;
NorFlash_unlock(tempblockadd );
NorFlash_bolckerase(tempblockadd);
//-------------存最新记录号 地址0x20030000---------
NorFlash_unlock(0x20030000 );
NorFlash_bolckerase(0x20030000);
do
{
NorFlash_write(0x20030000 + i*WordLen , ((U32)&number)+i*WordLen);
i++;
}while(i<2);
//-------------存系统参数---------
size = sizeof(_SystemSetting);
i = 0;
do
{
NorFlash_write(tempblockadd + i*WordLen , ((U32)&SystemSetting)+i*WordLen);
i++;
}while(i<size/2);
//-------------先存整定值,之后存电流电压倍数等参数----------
size = sizeof(_JDSetting);
tempblockadd += i*WordLen;
i = 0;
do
{
NorFlash_write(tempblockadd + i*WordLen , ((U32)JDSetting)+i*WordLen);
i++;
}while(i<size/2);
size = sizeof(_Value_Parameter);
tempblockadd = tempblockadd + i*WordLen;
i = 0;
do
{
NorFlash_write(tempblockadd + i*WordLen , ((U32)&Value_Parameter)+i*WordLen);
i++;
}while(i<size/2);
}
void SaveSystemPara()//存系统参数 地址0x20004000
{
int size = 0;
int i = 0;
NorFlash_unlock(SAVE_Value_ADDR );
NorFlash_bolckerase(SAVE_Value_ADDR);
size = sizeof(_SystemSetting);
do
{
NorFlash_write(SAVE_SYSTEM_ADDR + i*WordLen , ((U32)&SystemSetting)+i*WordLen);
i++;
}while(i<size/2);
}
U32 yxjjjj;
void LoadFromFlash(int NumOfVal )
{
int number = NumOfVal;
int size = 0;
int i = 0;
U32 tempadd;
U32 temp;
//---------------读取系统设定值-----------------
tempadd = SAVE_Value_ADDR+ERASEBLOCKSIZE*number;
size = sizeof(SystemSetting);
for(i= 0; i<size/4; i++)
{
*( (U32 *)&SystemSetting+i ) = *((U32 *)tempadd+i);
}
//---------------读取整定值-----------------
tempadd += size;
size = sizeof(_JDSetting);
for(i= 0; i<size/4; i++)
{
*( ((U32 *)JDSetting)+i ) = *((U32 *)tempadd+i);
}
//---------------读取电流电压倍数值-----------------
tempadd += size;
size = sizeof(_Value_Parameter);
for(i= 0; i<size/4; i++)
{
*( ((U32 *)&Value_Parameter)+i ) = *((U32 *)tempadd+i);
}
}
void Load_LinerAdjust()
{
U32 tempadd;
int size;
int i;
tempadd = SAVE_LinerAdjust_ADDR;
size = sizeof(_Channel_Adjust);
for(i= 0; i<size/4; i++)
{
*( (U32 *)Channel_AdjustAdd+i ) = *((U32 *)tempadd+i);
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?