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 + -
显示快捷键?