⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wridblock.lib

📁 这是一个在在Dynamic C环境下实现的设备web服务器的建立
💻 LIB
字号:
/*** BeginHeader */
#ifndef MY_WRIDBLOCK_LIB
#define MY_WRIDBLOCK_LIB
/*** EndHeader */

#ifndef _FLASH_
	#error "------Program Must Run In FLASH!------"
#endif

#ifndef GCPU
	#define GCPU						0x2E
#endif
#ifndef GREV
	#define GREV						0x2F
#endif

/*** BeginHeader SYSIDBLCOK_MAC */
xdata	SYSIDBLCOK_MAC					{ '\x00', '\x90', '\xC2', '\x11', '\x22', '\x33' };
/*** EndHeader */

/*** BeginHeader SetTimeStamp */
void SetTimeStamp(unsigned long timeStamp);
/*** EndHeader */
void SetTimeStamp(unsigned long timeStamp)
{
	auto struct tm		t;

	mktm(&t, timeStamp);
	SysIDBlock.timestamp[0] = (t.tm_year + 1900) / 100;
	SysIDBlock.timestamp[1] = t.tm_year % 100;
	SysIDBlock.timestamp[2] = t.tm_mon;
	SysIDBlock.timestamp[3] = t.tm_mday;
	SysIDBlock.timestamp[4] = t.tm_hour;
	SysIDBlock.timestamp[5] = t.tm_min;
	SysIDBlock.timestamp[6] = t.tm_sec;
}

/*** BeginHeader GetFlashID */
int GetFlashID(void);
/*** EndHeader */
int GetFlashID(void)
{
	static int id;

#asm
#if __SEPARATE_INST_DATA__ && FLASH_COMPILE
	ld		hl,		_GetFlashID
	lcall	_CallRAMFunction
#else
	call	_GetFlashID
#endif
	ld		(id),	hl
#endasm

	return(id);
}

/*** BeginHeader GetCPUID */
int GetCPUID(void);
/*** EndHeader */
int GetCPUID(void)
{
	static int id;
#asm
	ioi	ld	a,		(GCPU)
	and		0x1F
	ld		(id+1),	a
	ioi	ld	a,		(GREV)
	and		0x1F
	ld		(id),	a
#endasm

	return id;
}

/*** BeginHeader WriteIDBlock */
int WriteIDBlock(int MyProductID);
/*** EndHeader */
int WriteIDBlock(int MyProductID)
{
	auto int					iLen, iCrc;
	auto int					iSaveMB1or3CR;
	auto char					div19200val;
	auto unsigned long			ulPhysAddr;
	auto int					iReturn;

	iReturn		= 0;

	if( (_readIDBlock(0x01 | 0x02) != 0) || (MyProductID != SysIDBlock.productID) )
	{
		iSaveMB1or3CR = MB1CRShadow;
		WrPortI(MB1CR, &MB1CRShadow, FLASH_WSTATES | 0x00);
		_InitFlashDriver(0x01 | 0x02);

		memset(&SysIDBlock, 0x00, sizeof(SysIDBlock));

		SysIDBlock.tableVersion		= 4;
		SysIDBlock.productID		= MyProductID;
		SysIDBlock.vendorID			= 1;
		SetTimeStamp(SEC_TIMER);

		SysIDBlock.flashID			= GetFlashID();
		SysIDBlock.flashSize		= _FLASH_SIZE_;
		SysIDBlock.flashType		= _FlashInfo.writeMode;
		SysIDBlock.sectorSize		= _FlashInfo.sectorSize;
		SysIDBlock.numSectors		= _FlashInfo.numSectors;
		SysIDBlock.flashSpeed		= 0x00;
		SysIDBlock.ramID			= 0x01;
		SysIDBlock.ramSize			= _RAM_SIZE_;
		SysIDBlock.ramSpeed			= 0x00;
		SysIDBlock.cpuID			= GetCPUID();
		xmem2root(&div19200val, (unsigned long)divider19200, sizeof(char));
		SysIDBlock.crystalFreq		= div19200val * 614400ul;
		xmem2root(SysIDBlock.macAddr, SYSIDBLCOK_MAC, 6);
		SysIDBlock.idBlockSize		= sizeof(SysIDBlock);
		SysIDBlock.userBlockSize	= 0x4000 - (int) SysIDBlock.idBlockSize;
		SysIDBlock.userBlockLoc		= 0x4000 - (int) SysIDBlock.idBlockSize;
		SysIDBlock.marker[0]		= 0x55;
		SysIDBlock.marker[1]		= 0xAA;
		SysIDBlock.marker[2]		= 0x55;
		SysIDBlock.marker[3]		= 0xAA;
		SysIDBlock.marker[4]		= 0x55;
		SysIDBlock.marker[5]		= 0xAA;

		iLen						= (int)(&SysIDBlock.productName[29]) - (int)(&SysIDBlock.tableVersion) + 1;
		iCrc						= getcrc((char *)(&SysIDBlock), iLen, 0x0000);
		iCrc						= getcrc((char *)(&SysIDBlock.idBlockSize), 16, iCrc);
		SysIDBlock.idBlockCRC		= iCrc;

		ulPhysAddr = sectorToLong(_FlashInfo.numSectors) - sizeof(SysIDBlock);
		ulPhysAddr &= 0x000FFFFFul;	// ensure physical address is within 1MB range

		_overwrite_block_flag		= 1;
		iReturn						= WriteFlash(ulPhysAddr, &SysIDBlock, sizeof(SysIDBlock));
		_overwrite_block_flag		= 0;

		WrPortI(MB1CR, &MB1CRShadow, iSaveMB1or3CR);
	}

	return iReturn;
}

/*** BeginHeader */
#endif
/*** EndHeader */

⌨️ 快捷键说明

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