⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 check.c

📁 这个程序是软时钟程序,如果你不用硬时钟,可以使用这个程序
💻 C
字号:
#include <msp430xe42x.h>
#include <string.h>
#include "inc\Port.h"
#include "inc\Type.h"
#include "inc\General.h"
#include "inc\Mem.h"
#include "inc\Data.h"

const CHECKTAB ChkTab[]=
{
	(char*)CM_EC,	            20,                         Chk_FRAM,
        (char*)CM_MD,	            4,                          Chk_FRAM,
        (char*)Ram_Puls,	    2,                          Chk_FRAM,
        (char*)ADJ_PARA,            36,                         Chk_FRAM,     
        (char*)Meter_Addr,	    4,                          Chk_FRAM,
        (char*)Meter_Pass,	    4,                          Chk_FRAM,
        (char*)Meter_Time,	    7,                          Chk_FRAM,
        (char*)Segtable0,           20,                         Chk_E2PROM,
        (char*)Segtable1,           20,                         Chk_E2PROM, 
        (char*)Segtable2,           20,                         Chk_E2PROM,
        (char*)Segtable3,           20,                         Chk_E2PROM,
        (char*)Segtable4,           20,                         Chk_E2PROM, 
        (char*)Segtable5,           20,                         Chk_E2PROM,
        (char*)Segtable6,           20,                         Chk_E2PROM,
        (char*)Holiday,             20,                         Chk_E2PROM,
        (char*)Season,              20,                         Chk_E2PROM,
        (char*)WeekEnd,             11,                         Chk_E2PROM,
};

/**********************************************************************
	Get Check Table Point
**********************************************************************/
int GetChkPtr( char* Addr, char MemType )
{
	char 	i, Len;
	char	*BlkAddr;

	for( i=0; i<ChkTabNum; i++ ) 
	{
		if( ( (ChkTab[i].Type>>5)&0x07 ) == MemType )
		{
			BlkAddr = ChkTab[i].BlkAddr;
			Len = ChkTab[i].Lenth;
			if( Addr>=BlkAddr && Addr<(BlkAddr+Len) ) return i;
		}
	}
	return -1;
}

/**********************************************************************
	Calculate the checksum Of Data in RAM
**********************************************************************/
int ChkNum( char *Ptr, int Len )
{
	int 	Num = CHECKWORD;

	while( Len > 0 )
	{
		Num += *Ptr++;
		Len--;
	}
	return Num;
}
/**********************************************************************
	Calculate the checksum Of Data in FRAM, EEPORM, DFlash
**********************************************************************/
int ChkMem( unsigned long Ptr, int Lenth, char MemType )
{
	int	Num=CHECKWORD, Size;
	
	while( Lenth > 0 )
	{
		if( Lenth >= MAX_BUF ) Size = MAX_BUF;
		else Size = Lenth;
		MEM_Read( (char*)&Buffer, Ptr, Size, MemType );
		Num += ( ChkNum( (char*)&Buffer, Size ) - CHECKWORD );
		Ptr += Size;
		Lenth -= Size;
	}
	return Num;
}
/**********************************************************************
	Check & Correct if Error
**********************************************************************/
void MemCheck( void )
{
	int     BlkAddr, MemBak,Tmp;
	char	i,Len, MemType;
	
	for( i=0; i<ChkTabNum; i++ ) 
	{		
		BlkAddr = (int)ChkTab[i].BlkAddr;
		Len = ChkTab[i].Lenth;
		MemType = ChkTab[i].Type;
                MemType = (MemType>>5);
                MemBak = MemBakTab[MemType];
                MEM_Read( (char*)&Tmp, BlkAddr+Len, 2, MemType );
                if( Tmp != ChkMem( BlkAddr, Len, MemType ) ) 
                     MEM_MEM( BlkAddr, BlkAddr+MemBak, Len+2, MemType );	
	}
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -