fwflash.c

来自「e1c0df5d-c8bc-48a5-bc02-a2b7c51c0dbf是做mp」· C语言 代码 · 共 61 行

C
61
字号
#include "fwflash.h"/******************************************************** this routine performs a firmware update.* data structure is as following:** artalb[0]: sectors per cluster* artalb[2]: # of clusters in file* artalb[2-5]: (ulong) start of data (lba encoding)* artalb[6-x]: (uint) cluster containing firmware.bin********************************************************/void flash_firmware(void){	register unsigned int i;	register unsigned char sec;	unsigned long flashed, ccl;	unsigned int baddr, pcl, cl;	cl = artalb[0] | artalb[1] << 8;	sec = 0; pcl = 0;	for (flashed = 0; flashed < 0x3b00;)	{		ccl = 0;		for (i = 0; i < secpercluster;i++)		{			ccl += cl;		}		while (ReadSector((unsigned long) data + (unsigned long) ccl + sec));				for (i=0; i<4; i++)		{			boot_page_erase((unsigned long) flashed);						for (baddr = 0; baddr < 128; baddr+=2)			{				boot_page_fill(baddr, secbuf[(i*128)+baddr] | secbuf[(i*128)+baddr+1] << 8);			}			boot_page_write((unsigned long) flashed);			while (boot_rww_busy())			{				boot_rww_enable();			}			flashed += 128;		}				sec++;		if (sec == secpercluster)		{			sec = 0;			pcl += 2;			cl = artalb[pcl] | (unsigned int) artalb[pcl+1] << 8;		}	}	wdt_enable(1);			// re-enable watchdog	while (1);}

⌨️ 快捷键说明

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