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

📄 tmdbg.c

📁 wince host 和 target PCI驱动程序
💻 C
📖 第 1 页 / 共 2 页
字号:
	}	/* COPYBACK ( Address, ???? ) */	/* write back the buffer control block - ignoring the magic string */	COPYBACK ( (((PBYTE)this->pPersistData) + TMHD_DBG_MAGICSIZE + 1), 1 );	Length = wIdx;	for ( wIdx = 0 ; wIdx < Length ; wIdx++ )	{		Invalidate = (DWORD)			&this->pPersistData->pPBuffer[Current];		if ( ++Current >= this->pPersistData->PBufLen )		{			Current = 0;		}		COPYBACK ( (PBYTE)Invalidate , 1); 	}	/* don't forget the last block 	COPYBACK ( &this->pPersistData->pPBuffer[Current], 1); */	End = cycles();
	intRESTORE_IEN ( PCSW );
	Cycles = ( End > Start ) ? (End - Start)  : (End + ((DWORD)(~0) - Start));
	/* if ( Cycles > 2000 ) tmDBGString("LATENCY ERROR"); */
}	VOID	dbgOutStdout ( PVOID pvDebug, PCHAR szString ){	PTMDBG_OBJECT this = (PVOID)pvDebug;	fprintf ( stdout, szString  );}VOID	dbgOutStderr ( PVOID pvDebug, PCHAR szString ){	PTMDBG_OBJECT this = (PVOID)pvDebug;	fprintf ( stderr, szString  );}VOID	dbgOutMono ( PVOID pvDebug, PCHAR szString ){	PTMDBG_OBJECT this = (PVOID)pvDebug;	DWORD	dwIdx;	DWORD	PCSW;
	DWORD	Start, End, Cycles;
	PCSW = intCLEAR_IEN ();
	Start = cycles();
	for ( dwIdx = 0 ; ; dwIdx++ )	{		switch ( szString[dwIdx] )			{						case '\0' :			return;			case '\n' :			dbgRowInc ( this );			break;						default :			if ( ! iscntrl ( szString[dwIdx] ) )			{				*( this->pwScreenBuffer + 					( ( this->dwStartRow + this->dwCurrentRow ) * SCREEN_COLS ) 					+ ( this->dwStartCol + this->dwCurrentCol ) ) =					(WORD)(szString[dwIdx] | 0x0700 ); 				dbgColInc ( this );			}						break;		}	}	End = cycles();
	intRESTORE_IEN ( PCSW );
	Cycles = ( End > Start ) ? (End - Start)  : (End + ((DWORD)(~0) - Start));
	/* if ( Cycles > 2000 ) tmDBGString("LATENCY ERROR"); */
}/* callback debugging function entry point */BOOL	dbgCallback ( DWORD FuncitonID ){	PTMDBG_OBJECT this = (PVOID)pDBG;	return TRUE;}DWORD	tmDBGPrintf(char * pFormat, ...){/*
	PTMDBG_OBJECT this = (PTMDBG_OBJECT)pDBG;	DWORD	Idx, StrIdx = 0;	BYTE	Char;	DWORD	Items = 0;	DWORD	PCSW;	va_list	pArgument;	DWORD	Start, End, Cycles;
	PCSW = intCLEAR_IEN ();
	Start = cycles();
	va_start ( pArgument, pFormat );	for( Idx = 0 ; pFormat[Idx] ; Idx ++ )	{                if (StrIdx >= DBG_MAX_STRING_SIZE - 2) {		     break;		}		if( pFormat[Idx] == '%')		{			Items++;			Char = pFormat[++Idx];			switch( Char )			{				case 'd':				dbgProcessDec ( this->pTempStrG, &StrIdx, va_arg ( pArgument, DWORD ) );				break;				case 's':				dbgProcessStr ( this->pTempStrG, &StrIdx, va_arg ( pArgument, PVOID ) );				break;				case 'c':				dbgProcessChar ( this->pTempStrG, &StrIdx, va_arg ( pArgument, CHAR ) );				break;				case 'x':				dbgProcessHex ( this->pTempStrG, &StrIdx, va_arg ( pArgument, DWORD ) );				break;				default :				Items--;				this->pTempStrG[StrIdx++] = ('%');				this->pTempStrG[StrIdx++] = (Char);				break;			}		}		else		{			this->pTempStrG[StrIdx++] = pFormat[Idx];			continue;		}	}	this->pTempStrG[StrIdx] = 0;	va_end ( pArgument );	tmDBGString ( this->pTempStrG ); 	End = cycles();
	intRESTORE_IEN ( PCSW );
	Cycles = ( End > Start ) ? (End - Start)  : (End + ((DWORD)(~0) - Start));
	 if ( Cycles > 2000 ) tmDBGString("LATENCY ERROR"); 

	return Items;*/	return 0;}
/* internal use of TMMAN */
DWORD	tmDGBTMMANGetLevel(DWORD dwLevel )
{
    return ( ( ( dwLevel) & DBG.pSharedData->Level ) == dwLevel );
}/* internal use of TMMAN */DWORD	tmDBGTMMANPrintf( char * pFormat, ...){	PTMDBG_OBJECT this = (PTMDBG_OBJECT)pDBG;	DWORD	Idx, StrIdx = 0;	BYTE	Char;	DWORD	Items = 0;	DWORD	PCSW;	va_list	pArgument;

	DWORD	Start, End, Cycles;
	PCSW = intCLEAR_IEN ();
/*	Start = cycles();  */
	va_start ( pArgument, pFormat );	for( Idx = 0 ; pFormat[Idx] ; Idx ++ )	{		if ( ! ( StrIdx < DBG_MAX_STRING_SIZE ) )		{			StrIdx--;			break;		} 		if( pFormat[Idx] == '%')		{			Items++;			Char = pFormat[++Idx];			switch( Char )			{				case 'd':				dbgProcessDec ( this->pTempStrT, &StrIdx, va_arg ( pArgument, DWORD ) );				break;				case 's':				dbgProcessStr ( this->pTempStrT, &StrIdx, va_arg ( pArgument, PVOID ) );				break;				case 'c':				dbgProcessChar ( this->pTempStrT, &StrIdx, va_arg ( pArgument, CHAR ) );				break;				case 'x':				dbgProcessHex ( this->pTempStrT, &StrIdx, va_arg ( pArgument, DWORD ) );				break;				default :				Items--;				this->pTempStrT[StrIdx++] = ('%');				this->pTempStrT[StrIdx++] = (Char);				break;			}		}		else		{			this->pTempStrT[StrIdx++] = pFormat[Idx];			continue;		}	}	this->pTempStrT[StrIdx] = 0;	va_end ( pArgument );	dbgOutTraceP ( this,  this->pTempStrT  ); /*	End = cycles(); */
	intRESTORE_IEN ( PCSW );
/*	Cycles = ( End > Start ) ? (End - Start)  : (End + ((DWORD)(~0) - Start)); */

	return Items;}DWORD	tmDBGNULL(PVOID pDummy, ...){	return 0;}VOID	dbgProcessChar ( PCHAR pszBuffer, PDWORD pdwPosition, CHAR Value  ){	pszBuffer[(*pdwPosition)++] = Value;}VOID	dbgProcessDec ( PCHAR pszBuffer, PDWORD pdwPosition, DWORD Value  ){	DWORD	Divisor;	for( Divisor = 1 ; (Value / Divisor) >= 10 ;		Divisor *= 10);	do	{		pszBuffer[(*pdwPosition)++] = (BYTE)			( (Value / Divisor) + '0');		/* check if we are overflowing the temp buffer. */                if ((*pdwPosition) >= DBG_MAX_STRING_SIZE - 1) {		     break;		}		Value = (DWORD)(Value % Divisor);		Divisor /= 10;	} while ( Divisor > 0);}VOID	dbgProcessHex ( PCHAR pszBuffer, PDWORD pdwPosition, DWORD Value  ){	BYTE Hex[] = "0123456789ABCDEF";	DWORD	Divisor;	for( Divisor = 1 ; (Value / Divisor) >= 16 ;		Divisor *= 16);	do	{		pszBuffer[(*pdwPosition)++] = (Hex[(Value / Divisor)]);		/* check if we are overflowing the temp buffer. */                if ((*pdwPosition) >= DBG_MAX_STRING_SIZE - 1) {		     break;		}		Value = (DWORD)(Value % Divisor);		Divisor /= 16;	} while ( Divisor > 0);}VOID	dbgProcessStr ( PCHAR pszBuffer, PDWORD pdwPosition, PCHAR Value  ){	DWORD BufIdx;	for ( BufIdx = 0 ; Value[BufIdx];	BufIdx++ ) {		pszBuffer[(*pdwPosition)++]  = Value[BufIdx];		/* check if we are overflowing the temp buffer. */                if ((*pdwPosition) >= DBG_MAX_STRING_SIZE - 1) {		     break;		}	}}VOID	tmDBGString ( PCHAR szString ){
/*
	PTMDBG_OBJECT this = pDBG;	DWORD	BitMask = 0x01;	DWORD	IdxFunc;	for ( IdxFunc = 0 ; IdxFunc <  TMSTD_DBG_MAXOUTFUNC ; 		IdxFunc++, BitMask <<= 1 )	{		if ( ( this->pSharedData->OptionBits & BitMask ) )		{			if ( this->OutFunc[IdxFunc] )			{				this->OutFunc[IdxFunc](pDBG, szString);			}		}	}
*/
}STATUS	tmDBGBufferSize ( DWORD Size ){	PTMDBG_OBJECT this = pDBG; /* GLOBAL */	PVOID	pPBuf;	DWORD	dwPCSW;	DISABLEALL(dwPCSW);	/* try to allcoate the memory */	if ( ( pPBuf = malloc ( Size + sizeof ( TMHD_DBG_PBUFFER ) +		TMDBG_CACHE_ALIGNED_SIZE ) ) == NULL ) /* HARDCODED 64 byte alignment */	{		tmDBGTMMANPrintf(0, "tmman:tmDBGBufferSize:malloc:Persistent[%x]:FAIL\n", Size);		ENABLEALL(dwPCSW);		return TMDBG_ERR_OUTOFMEMORY;	}	/* destroy the magic so that TMMon doesn't get confused */	memset ( this->pPersistData->szMagic, 0, TMHD_DBG_MAGICSIZE  );	/* make sure that the cache contensts are dumped back to SDRAM */	COPYBACK ( this->pPersistData->szMagic, 2 );	/* assume there is an existing buffer and destroy it */	free ( this->pPersistData->pPBufStart );	this->pPersistData = 		(PTMHD_DBG_PBUFFER)((((DWORD)pPBuf) & 0xffffffc0 ) + TMDBG_CACHE_BLOCK_SIZE);	this->pPersistData->pPBufStart = pPBuf;	this->pPersistData->PWrapped = FALSE;	strcpy ( this->pPersistData->szMagic, TMHD_DBG_BUFMAGIC );	this->pPersistData->szMagic[0] = 'T';	this->pPersistData->szMagic[1] = 'M';	this->pPersistData->szMagic[2] = '-';	this->pPersistData->szMagic[3] = 'S';	this->pPersistData->szMagic[4] = 'o';	this->pPersistData->szMagic[5] = 'f';	this->pPersistData->szMagic[6] = 't';	this->pPersistData->PBufLen = Size;	this->pPersistData->PBufPos = 0;	this->pPersistData->pPBuffer = 		((PBYTE)this->pPersistData) + sizeof ( TMHD_DBG_PBUFFER );	COPYBACK (this->pPersistData->szMagic, 2 );	ENABLEALL(dwPCSW);	return TMOK;}DWORD	tmDBGOptions ( DWORD OptionBits ){	PTMDBG_OBJECT this = pDBG; /* GLOBAL */	DWORD	TempOptionBits = this->pSharedData->OptionBits;	this->pSharedData->OptionBits = OptionBits;	return TempOptionBits;}

⌨️ 快捷键说明

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