📄 debugtask.c
字号:
/* Initialization of string for saving */
memset( string , 0x00, sizeof( string ) );
watch_print.watchLong = 0;
/* Arrange string to output */
switch ( Watch_Area.watchMember[i].size )
{
case DBG_VALUE_SIZE_BYTE:
/* Transfer address contents */
watch_print.watchChar.watchChar1 = *(Watch_Area.watchMember[i].address);
/* Output 6 spaces */
PrintOut(" ");
break;
case DBG_VALUE_SIZE_WORD:
/* Transfer address contents */
watch_print.watchChar.watchChar1 = *( Watch_Area.watchMember[i].address );
watch_print.watchChar.watchChar2 = *( Watch_Area.watchMember[i].address + 1);
/* Output 4 spaces */
PrintOut(" ");
break;
case DBG_VALUE_SIZE_DWORD:
/* Transfer address contents */
watch_print.watchChar.watchChar1 = *( Watch_Area.watchMember[i].address );
watch_print.watchChar.watchChar2 = *( Watch_Area.watchMember[i].address + 1);
watch_print.watchChar.watchChar3 = *( Watch_Area.watchMember[i].address + 2);
watch_print.watchChar.watchChar4 = *( Watch_Area.watchMember[i].address + 3);
break;
default:
break;
}
/* Initialization of string for saving */
memset( string , 0x00, sizeof( string ) );
/* Output address contents in hexadecimal */
ValChangeStr ( string , watch_print.watchLong , Watch_Area.watchMember[i].size , PRINT_HEXA_MODE );
PrintOut( string );
/* Output address contents in decimal */
PrintOut(" ( ");
StrChangeHex( &value , string , Watch_Area.watchMember[i].size );
/* Initialization of string for saving */
memset( string , 0x00, sizeof( string ) );
/* Output address contents in decimal */
ValChangeStr( string , value , DBG_VALUE_SIZE_DWORD , PRINT_DECIMAL_MODE );
PrintOut( string );
PrintOut(" )");
}
return result;
}
/*
//=============================================================================
// Function_Name: FuncCmdProcWTC
// description : Command ( watch clear ) process
// argument : ???
// return : ???
// flag : ???
// global : ???
//=============================================================================
*/
LONG FuncCmdProcWTC( LONG extra )
{
LONG result = DBG_STATUS_SUCCESS;
int i,j;
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' )
{
break;
}
/* Output contents */
PrintOut("\r\n");
PrintOut( Watch_Area.watchMember[i].name );
PrintOut(" = ");
/* Clear memory contents with 0 */
for (j = 0 ; j < Watch_Area.watchMember[i].size ; j++)
{
/* Clear memory contents with 0 */
*(Watch_Area.watchMember[i].address + j ) = 0x00;
}
/* Initialization of string for saving */
memset( string , 0x00, sizeof( string ) );
/* Arrange string to output */
switch ( Watch_Area.watchMember[i].size )
{
case DBG_VALUE_SIZE_BYTE:
/* Transfer address contents */
watch_print.watchChar.watchChar1 = *(Watch_Area.watchMember[i].address);
/* Output 6 spaces */
PrintOut(" ");
break;
case DBG_VALUE_SIZE_WORD:
/* Transfer address contents */
watch_print.watchChar.watchChar1 = *( Watch_Area.watchMember[i].address );
watch_print.watchChar.watchChar2 = *( Watch_Area.watchMember[i].address + 1);
/* Output 4 spaces */
PrintOut(" ");
break;
case DBG_VALUE_SIZE_DWORD:
/* Transfer address contents */
watch_print.watchChar.watchChar1 = *( Watch_Area.watchMember[i].address );
watch_print.watchChar.watchChar2 = *( Watch_Area.watchMember[i].address + 1);
watch_print.watchChar.watchChar3 = *( Watch_Area.watchMember[i].address + 2);
watch_print.watchChar.watchChar4 = *( Watch_Area.watchMember[i].address + 3);
break;
default:
break;
}
/* Output address contents in hexadecimal */
ValChangeStr ( string , watch_print.watchLong , Watch_Area.watchMember[i].size , PRINT_HEXA_MODE );
PrintOut( string );
/* Output address contents in decimal */
PrintOut(" ( ");
StrChangeHex( &value , string , Watch_Area.watchMember[i].size );
/* Initialization of string for saving */
memset( string , 0x00, sizeof( string ) );
ValChangeStr( string , value , DBG_VALUE_SIZE_DWORD , PRINT_DECIMAL_MODE );
PrintOut( string );
PrintOut(" )");
}
return result;
}
/*
//=============================================================================
// Function_Name: FuncCmdProcFlow
// description : Command ( Flow ) process
// argument : ???
// return : ???
// flag : ???
// global : ???
//=============================================================================
*/
LONG FuncCmdProcFlow( LONG extra )
{
LONG result = DBG_STATUS_SUCCESS;
/* Flow switch */
FlowToggle = !FlowToggle;
/* Flow level */
FlowLevel = CurrentData.dataMember.rcvAddress;
/* Output state */
if( FlowToggle == TRUE )
{
/* Set to ON */
PrintOut("----- FLOW : ON -----");
}
else
{
/* Set to OFF */
PrintOut("----- FLOW : OFF -----");
}
return result;
}
/*
//=============================================================================
// Function_Name: FuncCmdProcHelp
// description : Command ( help ) process
// argument : ???
// return : ???
// flag : ???
// global : ???
//=============================================================================
*/
LONG FuncCmdProcHelp( LONG extra )
{
LONG result = DBG_STATUS_SUCCESS;
int i;
/* Output command table */
for( i = 0; ; i++ )
{
if( g_Tbl_CmdInfo[ i ].pString == NULL )
{
break; // Finish in table end
}
/* Output command string except NULL string */
if( *g_Tbl_CmdInfo[ i ].pString != '\0' )
{
/* Output command name */
PrintOut(" ");
PrintOut( g_Tbl_CmdInfo[ i ].pString );
}
else
{
PrintOut("\r\n ");
}
/* Output command extra information 1 */
PrintOut(" ");
PrintOut( g_Tbl_CmdInfo[ i ].info1 );
/* Output command extra information 2 */
PrintOut(" ");
PrintOut( g_Tbl_CmdInfo[ i ].info2 );
PrintOut("\r\n");
}
return result;
}
/*
//=============================================================================
// Function_Name: FuncCmdProcIDEMode
// description : Command ( IDE MODE ) process
// argument : ???
// return : ???
// flag : ???
// global : ???
//=============================================================================
*/
LONG FuncCmdProcIDEMode( LONG extra )
{
LONG result = DBG_STATUS_SUCCESS;
return result;
}
/*
//=============================================================================
// Function_Name: ErrOutput
// description : Error string output function
// argument : ???
// return : ???
// flag : ???
// global : ???
//=============================================================================
*/
BOOL ErrOutput( LONG inStatus )
{
PrintOut("\r\n");
switch( inStatus )
{
case DBG_STATUS_UNSUCCESSFUL:
/* General error */
PrintOut("..ERROR..");
break;
case DBG_STATUS_INVALID_COMMAND:
/* Command error */
PrintOut("..INVALID COMMAND..");
break;
case DBG_STATUS_INVALID_ADDRESS:
/* Address error */
PrintOut("..INVALID ADDRESS..");
break;
case DBG_STATUS_INVALID_DATA:
/* Data error */
PrintOut("..INVALID DATA..");
break;
case DBG_STATUS_PARAM_ERROR:
/* parameter error */
PrintOut("..PARAMETER ERROR..");
break;
}
/* Command initialization in case of error */
memset( &CurrentData , 0x00, sizeof( DATA_COMPOSITION ) );
return TRUE;
}
/*
//=============================================================================
// Function_Name: CheckCapitalAndSmall
// description : Sameness judgement of upper case letter / lower case letter
// argument : Comparison origin character ( source )
// Comparison destination character ( destination )
// return : TRUE Confirm agree in sameness
// FALSE Don't agree in sameness
//
// Identity upper case letter and lower case letter, carry out character comparison.
//=============================================================================
*/
BOOL CheckCapitalAndSmall( UCHAR Src, UCHAR Dest )
{
BOOL result; // Return value
if( !(((Src >= 'A') && (Src <= 'Z')) ||
((Src >= 'a') && (Src <= 'z'))) )
{
/* It is not letter */
if((Src >= '0') && (Src <= '9'))
{
/* Digit */
if(Src == Dest)
{
result = TRUE;
}
else
{
result = FALSE;
}
}
else
{
/* It is not letter/digit permitted */
/* Symbol */
if(Src == Dest)
{
result = TRUE;
}
else
{
result = FALSE;
}
}
}
else
{
/* Letter */
/* At least, is it agreed with first collum of ASCII code? */
if((Src & 0x0F) == (Dest & 0x0F))
{
/* Is 2nd collum of ASCII code even number or odd number? */
if((Src & 0x10) == (Dest & 0x10))
{
result = TRUE;
}
else
{
result = FALSE;
}
}
else
{
result = FALSE;
}
}
return result;
}
/*
//=============================================================================
// Function_Name: StrChangeHex
// description : Numeric value change process
// argument : ???
// return : ???
// flag : ???
// global : ???
//=============================================================================
*/
LONG StrChangeHex( ULONG* pHexConvValue, CHAR* pStr , UCHAR size )
{
int strSize;
int i;
LONG result = DBG_STATUS_SUCCESS;
i = 0;
// Remove spaces of start
while( *(pStr + i) == ' ' )
{
i++;
}
/* Inputted string */
strSize = strlen( (CHAR *)pStr );
/* Subtract start spaces' worth from string size */
strSize -= i;
/* Subtract 1 byte for NULL byte */
// Return error if the string size is 0
if( strSize == 0 )
{
result = DBG_STATUS_NOINPUT;
return result;
}
// Return error if string size is greater than specified size
if( strSize > size )
{
result = DBG_STATUS_UNSUCCESSFUL;
return result;
}
// Judgement of hexadecimal
for( ; i < strSize; i++ )
{
if( !isxdigit( *(pStr + i) ) )
{
result = DBG_STATUS_UNSUCCESSFUL;
return result;
}
}
// Hexadecimal change
*pHexConvValue = strtoul( (CHAR *)pStr, NULL, 16 );
return result;
}
/*
//=============================================================================
// Function_Name: ValChangeStr
// description : String change process
// argument : ???
// return : ???
// flag : ???
// global : ???
//=============================================================================
*/
VOID ValChangeStr( CHAR* str , ULONG Val , UCHAR type , UCHAR mode)
{
int i,j; // Index
int strLen; // Length of string
LONG quot; // For saving quotient
LONG rem; // For saving the rest
char c[ DBG_VALUE_SIZE_DWORD + 1 ]; // For saving string
/* Initialize saving string */
memset( c , 0x00 , sizeof(c) );
for ( i = type - 1 ; i >= 0 ; i-- )
{
/* Case of output format is decimal */
if( mode == PRINT_DECIMAL_MODE )
{
/* Save the quotient devided by 10 */
quot = Val / 10;
/* Save the rest devided by 10 */
rem = Val % 10;
}
else if( mode == PRINT_HEXA_MODE )
/* Case of output format is hexadecimal */
{
/* Save the quotient devided by 10h */
quot = Val / 0x10;
/* Save the rest devided by 1h */
rem = Val % 0x10;
}
else
{
quot = 0;
rem = 0;
}
if( quot == 0 && rem == 0 && mode == PRINT_DECIMAL_MODE )
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -