ramimage.c
来自「在ARM7和UC/OSII的平台上实现了GPS自动报站的功能,涉及GPS模块LE」· C语言 代码 · 共 63 行
C
63 行
/****************************************************************
** *
** FILE : RamImage.C *
** COPYRIGHT : (c) 2001 .Xiamen Yaxon NetWork CO.LTD *
** *
** *
** By : CCH 2002.1.15 *
****************************************************************/
#define GLOBAL_RAMIMAGE
#include "includes.h"
#include "bsp.h"
#include "tools.h"
#include "ramimage.h"
#pragma arm section zidata = "RAM_IMAGE"
static INT8U RamImage_mem[SIZE_FLASHSECTOR];
#pragma arm section zidata
BOOLEAN RamImageValid(INT8U ParaID)
{
INT8U *iptr;
INT8U chksum;
INT16U size;
if (ParaID >= sizeof(ParaTbl)/sizeof(ParaTbl[0])) return FALSE;
iptr = (INT8U *)(RamImage_mem + ParaTbl[ParaID].offset);
size = ParaTbl[ParaID].size / 2;
chksum = *(iptr + size - 1);
if (chksum != GetChkSum_N(iptr, size - 1)) return FALSE;
if (CmpString(iptr, iptr + size, size) != STR_EQUAL) return FALSE;
else return TRUE;
}
BOOLEAN ResumeRamImage(INT8U ParaID, INT8U *ptr, INT16U len)
{
INT8U *iptr;
INT16U size;
if (ParaID >= sizeof(ParaTbl)/sizeof(ParaTbl[0])) return FALSE;
size = ParaTbl[ParaID].size / 2;
if (len >= size) return FALSE;
if (!RamImageValid(ParaID)) return FALSE;
iptr = (INT8U *)(RamImage_mem + ParaTbl[ParaID].offset);
memcpy(ptr, iptr, len);
return TRUE;
}
BOOLEAN StoreRamImage(INT8U ParaID, INT8U *ptr, INT16U len)
{
INT8U *iptr;
INT16U size;
if (ParaID >= sizeof(ParaTbl)/sizeof(ParaTbl[0])) return FALSE;
size = ParaTbl[ParaID].size / 2;
if (len >= size) return FALSE;
iptr = (INT8U *)(RamImage_mem + ParaTbl[ParaID].offset);
memcpy(iptr, ptr, len);
*(iptr + size - 1) = GetChkSum_N(iptr, size - 1);
memcpy(iptr + size, iptr, size);
return TRUE;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?