flashimg.c

来自「在ARM7和UC/OSII的平台上实现了GPS自动报站的功能,涉及GPS模块LE」· C语言 代码 · 共 89 行

C
89
字号
/****************************************************************
**                                                              *
**  FILE         :  FlashImg.C                                  *
**  COPYRIGHT    :  (c) 2001 .Xiamen Yaxon NetWork CO.LTD       *
**                                                              *
**                                                              *
**  By : CCH 2002.1.15                                          *
****************************************************************/
#include "includes.h"
#include "target.h"
#include "hardware.h"
#include "flash.h"
#include "flashimg.h"
#include "zprint.h"

static INT8U FlashID[SIZE_FLASHID] = {0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
                                      0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f};


 INT8U *SramSectorPtr(INT8U *sptr)
{
    INT32U temp;
	
    temp  = (INT32U)sptr;
    temp &= ~(SIZE_FLASHSECTOR - 1L);
    return (INT8U *)temp;
}

void WriteFlashID(INT16U nSector)
{
	
  	FlashWrite(nSector, 0, &FlashID[0], SIZE_FLASHID);
}

BOOLEAN ImageFlashValid(INT16U nSector)
{
    INT8U i;
    INT8U *ptr;
    ptr = (INT8U *)FlashAbsAddr(nSector, 0);
    for (i = 0; i < SIZE_FLASHID; i++) {
        if (*ptr++ != FlashID[i]){
            return FALSE;
       }
    }
    return TRUE;
}

void UpdateImageFlash(INT16U nSector, INT8U *sptr)
{

  INT8U i, *ptr;
    
    ClearWatchdog();                           /* clear watchdog */
    sptr = SramSectorPtr(sptr);
    ptr = sptr;
    SectorErase_Flash(nSector);
    for(i=0; i < SIZE_FLASHID; i++) *ptr++ = FlashID[i];
	FlashWrite(nSector, 0, sptr, SIZE_FLASHSECTOR);
    ClearWatchdog();                           /* clear watchdog */
}

BOOLEAN InitImageSram(INT16U nSector, INT8U *sptr)
{
    INT16U i;
    INT8U *fptr;
  
    if (ImageFlashValid(nSector)) {
        sptr = SramSectorPtr(sptr);
        fptr = (INT8U *)FlashAbsAddr(nSector, 0);
        for (i = 0; i < SIZE_FLASHSECTOR; i++) {
            *sptr++ = *fptr++;
        }
        return TRUE;
    } else {
        return FALSE;
    }
}

void ClearImageSram(INT8U *sptr)
{
    INT16U i;
		
    sptr = SramSectorPtr(sptr);
    for (i = 0; i < SIZE_FLASHSECTOR; i++) {
        *sptr++ = 0xff;
    }
}

⌨️ 快捷键说明

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