📄 flashimage.c
字号:
//#include "csbin.h"
static volatile unsigned long *LED=(unsigned long *)0x80840020;
int OEMReadData(int size, unsigned char *pDest, unsigned char **pSrc)
{
int i;
unsigned int *pWDest, *pWSrc;
*LED |= 1;
pWDest = (unsigned int *)pDest;
pWSrc = (unsigned int *)*pSrc;
for (i=0;i<size>>2;i++)
{
if(!(i & 0x3FFFF))
{
*LED ^= 3;
}
*pWDest++ = *pWSrc++;
}
*pSrc = (unsigned char *)pWSrc;
*LED &= ~3;
return(1);
}
int ValidHeader(unsigned char *pHdr)
{
if((pHdr[0]==0xaa) &&
(pHdr[1]=='B') &&
(pHdr[2]=='0') &&
(pHdr[3]=='0') &&
(pHdr[4]=='0') &&
(pHdr[5]=='F') &&
(pHdr[6]=='F') &&
(pHdr[7]==0xa))
{
return(1);
}
return(-1);
}
int CopyNGo(unsigned char *pData)
{
unsigned char hdr[8];
unsigned char *dwImageStart;
unsigned char *dwImageLength;
int dwRecLen, dwRecChk, dwRecAddr;
//
// Clear the LEDs
//
*LED &= ~3;
OEMReadData (8, hdr, &pData);
// read the 8 byte "magic number"
if (ValidHeader(hdr) < 0)
{
//
// Set RED LED
//
*LED |= 2;
return 0;
}
// read image start/length
OEMReadData (sizeof (int), (unsigned char *)&dwImageStart, &pData);
OEMReadData (sizeof (int), (unsigned char *)&dwImageLength, &pData);
// read records (start with address, length, and checksum)
while (1)
{
OEMReadData(sizeof(dwRecAddr), (unsigned char *)&dwRecAddr, &pData);
OEMReadData(sizeof(dwRecLen), (unsigned char *)&dwRecLen, &pData);
OEMReadData(sizeof(dwRecChk), (unsigned char *)&dwRecChk, &pData);
// check for last record
if (!dwRecAddr && !dwRecChk)
{
// update launch address
return dwRecLen;
}
//
// read data block
//
OEMReadData(dwRecLen, (unsigned char *)dwRecAddr, &pData);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -