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