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