📄 debugtask.c
字号:
// =============================================================================
*/
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 + -