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

📄 debugtask.c

📁 epson usb2.0 控制芯片 S1R72V05 固件程序。
💻 C
📖 第 1 页 / 共 5 页
字号:
// =============================================================================
*/
LONG  FuncCmdProcDD( LONG extra )
{
	LONG  result =	DBG_STATUS_SUCCESS;

	/* Address editing */
	CurrentData.dataMember.rcvAddress &= ~(0x0F);

	/* Carry out dump double word output */
	DDOutput( (UCHAR *)CurrentData.dataMember.rcvAddress );

	return result;
}
/*=============================================================================
// Function_Name: DDOutput
// description	: Dump double word output process
// argument		: pAddress		Address of output object
// return		: None
// =============================================================================
*/
void  DDOutput(UCHAR*  pAddress)
{
	UCHAR  linecnt;
	CHAR  string[DBG_STR_MAX];
	int	   i;

	CHAR*  pCurAdd;
	UCHAR  strCnt;						//String counter

	// Caption output
	PrintOut(" Address | +0       +4       +8       +C       |0123456789ABCDEF");
	PrintOut("\r\n");
	PrintOut("---------|-------------------------------------+---- ASCII -----");

	//	Dump  4Line Print Out
	for( linecnt = 0; linecnt < PRINT_OUT_MAX_LINE;  linecnt++)
	{
		PrintOut("\r\n");
		// Address output
		memset( string , 0x00 , sizeof( string ) );
		ValChangeStr ( string , (ULONG) (pAddress +  linecnt * 0x10) , DBG_VALUE_SIZE_DWORD , PRINT_HEXA_MODE );
		PrintOut( string );
		PrintOut( " |" );

		// Binary output
		memset( string , 0x00 , sizeof( string ) );
		pCurAdd = string;
		for( i = linecnt * PRINT_DD_MAX_BYTE; i < ( linecnt + 1 ) * PRINT_DD_MAX_BYTE; i++)
		{
			*pCurAdd++ = ' ';
			ValChangeStr ( pCurAdd , *((LONG* )pAddress	+ i) , DBG_VALUE_SIZE_DWORD , PRINT_HEXA_MODE );
			pCurAdd+=8;
		}

		PrintOut( string );
		PrintOut(" |" );

		pCurAdd = string;
		for( i = linecnt * PRINT_DB_MAX_BYTE; i < ( linecnt + 1 ) * PRINT_DB_MAX_BYTE; i++ )
		{
			if (   *( pAddress + i)  >= '0'   &&	*( pAddress + i)  <= 'z' ){
				/* ASCII output */
				sprintf( pCurAdd , "%c" , *( pAddress + i) );
				pCurAdd++;
			}else{
				/* For character which can not be displayed, output with period */
				*pCurAdd++ = '.';
			}
		}
		*pCurAdd = 0x00;		// insert null
		PrintOut( string );
	}
}
/*=============================================================================
// Function_Name: FuncCmdProcEB
// description	: Command ( Enter -byte ) process
// argument		: extra		Extra information
// return		: None
// =============================================================================
*/
LONG  FuncCmdProcEB( LONG extra )
{
	LONG	result =  DBG_STATUS_SUCCESS;
	UCHAR	strData[10];		/* For saving data inputted */
	UCHAR*	pAddress;
	USHORT	rcvCnt;

	/* Check whether data is exist */
	if( CurrentData.dataMember.rcvData == 0x00 )
	{
		/* Continuous process */
		while (1)
		{
			/* Output current memory contents in case of no data input */

			EBOutput( (UCHAR *)CurrentData.dataMember.rcvAddress );
			// wait string received
			GetStr( (CHAR*)strData, &rcvCnt, 0 );

			/* Analysis judgement */
			if( strData[0] == DBG_ENTER_EXIT_Q	||
				strData[0] == DBG_ENTER_EXIT_q )
			{
				/* Continuous re-write will be finished by inputting "Q" */
				break;
			}

			if( strData[0] == DBG_ENTER_NEXT )
			{
				/* Case of input is "\n" */
				CurrentData.dataMember.rcvAddress += DBG_ENTER_BYTE_DIS;	// Address + 1h
			}
			else if( strData[0] == DBG_ENTER_BACK )
			{
				/* Case of input is "^" */
				CurrentData.dataMember.rcvAddress -= DBG_ENTER_BYTE_DIS;	// Address - 1h
			}
			else
			{
				/* Numeric value change in case of data inputted */
				result = StrChangeHex( &CurrentData.dataMember.rcvData , (CHAR *)strData , DBG_VALUE_SIZE_BYTE );
				if( result != DBG_STATUS_SUCCESS )
				{
					/* Output error and finish in case of data input error */
					result	=  DBG_STATUS_INVALID_DATA;
					return result;
				}

				/* Carry out re-write of continuous bytes */
				pAddress = (UCHAR *)CurrentData.dataMember.rcvAddress;
				*pAddress = (UCHAR)(CurrentData.dataMember.rcvData);

				/* Address of byte after re-write + 1h */
				CurrentData.dataMember.rcvAddress += DBG_ENTER_BYTE_DIS;

			}

		}
	}
	else
	/* Simple process in case of there is data inputted */
	{
		if( extra == DBG_STATUS_SUCCESS )
		{
			/* Carry out simple byte re-write */
			pAddress = (UCHAR *)CurrentData.dataMember.rcvAddress;
			*pAddress = (UCHAR)(CurrentData.dataMember.rcvData);
		}
		else
		{
			/* Output error and finish in case of data input error */
			result	=  DBG_STATUS_INVALID_DATA;
			return result;
		}
	}

	return result;
}
/*
//=============================================================================
// Function_Name: EBOutput
// description	: Enter - byte output process
// argument		: ???
// return		: ???
// flag			: ???
// global		: ???
//=============================================================================
*/
void  EBOutput(UCHAR*  pAddress)
{
		CHAR  string[DBG_STR_MAX];					/* String to output */

		/* Ouput address of re-write object */
		memset( string , 0x00 , sizeof( string ) );
		ValChangeStr( string , (ULONG) ( pAddress ) , DBG_VALUE_SIZE_DWORD , PRINT_HEXA_MODE );
		PrintOut( string );
		/* Ouput address contents of re-write object */
		memset( string , 0x00 , sizeof( string ) );
		ValChangeStr( string , (ULONG) ( *pAddress ) , DBG_VALUE_SIZE_BYTE , PRINT_HEXA_MODE );
		PrintOut( "  " );
		PrintOut( string );
		PrintOut( " : " );
}
/*
//=============================================================================
// Function_Name: FuncCmdProcEW
// description	: Command ( Enter - word ) process
// argument		: extra		Extra information
// return		: None
// =============================================================================
*/
LONG  FuncCmdProcEW( LONG extra )
{
	LONG	result =  DBG_STATUS_SUCCESS;
	UCHAR	strData[10];		/* For saving data inputted */
	USHORT*	pAddress;

	USHORT rcvCnt;

	/* Check address, if it is not multiples of 2, assume error */
	if( CurrentData.dataMember.rcvAddress % 0x02  != 0x00 )
	{
		/* In case of address input error, output error and finish. */
		result	=  DBG_STATUS_INVALID_ADDRESS;
		return result;
	}

	/* Check whether data is exist */
	if( CurrentData.dataMember.rcvData == 0x00 )
	{
		/* Continuous process ( finish condition is "Q" inputted and data error only) */
		while (1)
		{
			/* Output current memory contents in case of no data input */
			EWOutput( (USHORT *)CurrentData.dataMember.rcvAddress );

			// wait string received
			GetStr( (CHAR*)strData, &rcvCnt, 0 );

			/* Analysis judgement */
			if( strData[0] == DBG_ENTER_EXIT_Q	||
				strData[0] == DBG_ENTER_EXIT_q )
			{
				/* Continuous re-write will be finished by inputting "Q" */
				break;
			}

			if( strData[0] == DBG_ENTER_NEXT )
			{
				/* Case of input is "\n" */
				CurrentData.dataMember.rcvAddress += DBG_ENTER_WORD_DIS;	// Address + 2h
			}
			else if( strData[0] == DBG_ENTER_BACK )
			{
				/* Case of input is "^" */
				CurrentData.dataMember.rcvAddress -= DBG_ENTER_WORD_DIS;	// Address - 2h
			}
			else
			{
				/* Numeric value change in case of data inputted */
				result = StrChangeHex( &CurrentData.dataMember.rcvData , (CHAR *)strData , DBG_VALUE_SIZE_WORD );
				if( result != DBG_STATUS_SUCCESS )
				{
					/* Output error and finish in case of data input error */
					result	=  DBG_STATUS_INVALID_DATA;
					return result;
				}

				/* Carry out continuous word re-write */
				pAddress = (USHORT *)CurrentData.dataMember.rcvAddress;
				*pAddress = (USHORT)(CurrentData.dataMember.rcvData);

				/* Byte after re-write + 2h */
				CurrentData.dataMember.rcvAddress += DBG_ENTER_WORD_DIS;;
			}

		}
	}
	else
	/* Simple process in case of there is data inputted */
	{
		if( extra == DBG_STATUS_SUCCESS )
		{
			/* Carry out simple word re-write */
			pAddress = (USHORT *)CurrentData.dataMember.rcvAddress;
			*pAddress = (USHORT)(CurrentData.dataMember.rcvData);
		}
		else
		{
			/* Output error and finish in case of data input error */
			result	=  DBG_STATUS_INVALID_DATA;
			return result;
		}
	}

	return result;
}
/*
//=============================================================================
// Function_Name: EWOutput
// description	: Enter - word output process
// argument		: ???
// return		: ???
// flag			: ???
// global		: ???
//=============================================================================
*/
void  EWOutput(USHORT*	pAddress)
{
		CHAR  string[DBG_STR_MAX];					/* String to output */

		/* Ouput address of re-write object */
		memset( string , 0x00 , sizeof( string ) );
		ValChangeStr( string , (ULONG) ( pAddress ) , DBG_VALUE_SIZE_DWORD , PRINT_HEXA_MODE );
		PrintOut( string );
		/* Ouput address contents of re-write object */
		memset( string , 0x00 , sizeof( string ) );
		ValChangeStr( string , (ULONG) ( *pAddress ) , DBG_VALUE_SIZE_WORD , PRINT_HEXA_MODE );
		PrintOut( "  " );
		PrintOut( string );
		PrintOut( " : " );
}
/*
//=============================================================================
// Function_Name: FuncCmdProcED
// description	: Command ( Enter - word ) process
// argument		: ???
// return		: ???
// flag			: ???
// global		: ???
//=============================================================================
*/
LONG  FuncCmdProcED( LONG extra )
{
	LONG	result =  DBG_STATUS_SUCCESS;
	UCHAR	strData[10];		/* For saving data inputted */
	ULONG*	pAddress;

	USHORT	rcvCnt;

	/* Check address, if it is not multiples of 4, assume error */
	if( CurrentData.dataMember.rcvAddress % 0x04  != 0x00 )
	{
		/* In case of address input error, output error and finish. */
		result	=  DBG_STATUS_INVALID_ADDRESS;
		return result;
	}

	/* Check whether data is exist */
	if( CurrentData.dataMember.rcvData == 0x00 )
	{
		/* Continuous process ( finish condition is "Q" inputted and data error only) */
		while (1)
		{
			/* Output current memory contents in case of no data input */
			EDOutput( (ULONG *)CurrentData.dataMember.rcvAddress );

			// wait string received
			GetStr( (CHAR*)strData, &rcvCnt, 0 );

			/* Analysis judgement */
			if( strData[0] == DBG_ENTER_EXIT_Q	||
				strData[0] == DBG_ENTER_EXIT_q )
			{
				/* Continuous re-write will be finished by inputting "Q" */
				break;
			}

			if( strData[0] == DBG_ENTER_NEXT )
			{
				/* Case of input is "\n" */
				CurrentData.dataMember.rcvAddress += DBG_ENTER_DWORD_DIS;	// Address + 4h
			}
			else if( strData[0] == DBG_ENTER_BACK )
			{
				/* Case of input is "^" */
				CurrentData.dataMember.rcvAddress -= DBG_ENTER_DWORD_DIS;	// Address - 4h
			}
			else
			{
				/* Numeric value change in case of data inputted */
				result = StrChangeHex( &CurrentData.dataMember.rcvData , (CHAR *)strData , DBG_VALUE_SIZE_DWORD );
				if( result != DBG_STATUS_SUCCESS )
				{
					/* Output error and finish in case of data input error */
					result	=  DBG_STATUS_INVALID_DATA;
					return result;
				}

				/* Carry out continuous word re-write */
				pAddress = (ULONG *)CurrentData.dataMember.rcvAddress;
				*pAddress = (ULONG)(CurrentData.dataMember.rcvData);

				/* Byte after re-write + 4h */
				CurrentData.dataMember.rcvAddress += DBG_ENTER_DWORD_DIS;;
			}

		}
	}
	else
	/* Simple process in case of there is data inputted */
	{
		if( extra == DBG_STATUS_SUCCESS )
		{
			/* Carry out simple word re-write */
			pAddress = (ULONG *)CurrentData.dataMember.rcvAddress;
			*pAddress = (ULONG)(CurrentData.dataMember.rcvData);
		}
		else
		{
			/* Output error and finish in case of data input error */
			result	=  DBG_STATUS_INVALID_DATA;
			return result;
		}
	}

	return result;
}
/*
//=============================================================================
// Function_Name: EDOutput
// description	: Enter - double word output process
// argument		: ???
// return		: ???
// flag			: ???
// global		: ???
//=============================================================================
*/
void  EDOutput(ULONG*  pAddress)
{
		CHAR  string[DBG_STR_MAX];					/* String to output */

		/* Ouput address of re-write object */
		memset( string , 0x00 , sizeof( string ) );
		ValChangeStr( string , (ULONG) ( pAddress ) , DBG_VALUE_SIZE_DWORD , PRINT_HEXA_MODE );
		PrintOut( string );
		/* Ouput address contents of re-write object */
		memset( string , 0x00 , sizeof( string ) );
		ValChangeStr( string , (ULONG) ( *pAddress ) , DBG_VALUE_SIZE_DWORD , PRINT_HEXA_MODE );
		PrintOut( "  " );
		PrintOut( string );
		PrintOut( " : " );
}
/*
//=============================================================================
// Function_Name: FuncCmdProcWT
// description	: Command ( watch ) process
// argument		: ???
// return		: ???
// flag			: ???
// global		: ???
//=============================================================================
*/
LONG  FuncCmdProcWT( LONG extra )
{
	LONG   result =  DBG_STATUS_SUCCESS;
	int	   i;
	CHAR   string[DBG_STR_MAX];
	ULONG	value;


	value = 0;	// Cope with warning for the optimization.

	/* Output memory state */
	for( i = 0 ; ; i++ )
	{
		if( *Watch_Area.watchMember[i].name == '\0' )
		/* Finish in case of no registration */
		{
			break;
		}
		/* Output contents */
		PrintOut("\r\n");
		PrintOut( Watch_Area.watchMember[i].name );
		PrintOut(" = ");

⌨️ 快捷键说明

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