📄 check.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 + -