📄 sys_debug.c
字号:
switch(u8data)
{
case 0x08 : //Backspace
if((u8CmdCount) > 0)
{
(u8CmdCount)--;
CT_UART_PutString("\b \b");
}
break;
case 0x0d : //Enter
if ( memcmp(au8CmdBuf, "ho01", 4)==0 )
{
CT_UART_PutString("=====> ho01\n");
CT_OS_TaskInfo();
// _dump_stack_info();
u8CmdCount=0;
memset(au8CmdBuf, 0, USRDEBUG_MAX_COMMAND_LENGTH);
CT_UART_PutString("\n\rCDAT >>");
break;
}
if ( memcmp(au8CmdBuf, "ho02", 4)==0 )
{
bGetHISRInfo = TRUE;
CT_OS_HISRInfo();
u8CmdCount=0;
memset(au8CmdBuf, 0, USRDEBUG_MAX_COMMAND_LENGTH);
CT_UART_PutString("\n\rCDAT >>");
break;
}
if ( memcmp(au8CmdBuf, "ho03", 4)==0 )
{
CT_UART_PutString("=====> ho03\n");
CT_OS_SemaphoreInfo();
u8CmdCount=0;
memset(au8CmdBuf, 0, USRDEBUG_MAX_COMMAND_LENGTH);
CT_UART_PutString("\n\rCDAT >>");
break;
}
#ifdef CTOS_ECOS
if ( memcmp(au8CmdBuf, "ho04", 4)==0 )
{
u8 *pTest;
u32 j = 0, k = 0;
CT_UART_PutString("=====> ho04\n");
pTest = (u8 *)au8Argv;
u8Argc = 0;
if (Usrdebug_ParseCommand(&au8CmdBuf[0], &u8Argc, pTest) == DRV_OK)
{
CT_OS_DumpPCStackByTaskId(DHConvert(&(pTest[1 * DEBUG_MAX_ARGV_LENGTH])), DHConvert(&(pTest[2 * DEBUG_MAX_ARGV_LENGTH])));
}
/*
* Clean argv and argc.
*/
for (j = 0; j < u8Argc; j++)
{
for (k = 0; k < DEBUG_MAX_ARGV_LENGTH; k++)
{
au8Argv[j][k] = 0;
}
}
u8Argc = 0;
u8CmdCount=0;
memset(au8CmdBuf, 0, USRDEBUG_MAX_COMMAND_LENGTH);
CT_UART_PutString("\n\rCDAT >>");
break;
}
if ( memcmp(au8CmdBuf, "ho05", 4)==0 )
{
CT_UART_PutString("=====> ho05\n");
CT_OS_MonitorTimerCreate();
u8CmdCount=0;
memset(au8CmdBuf, 0, USRDEBUG_MAX_COMMAND_LENGTH);
CT_UART_PutString("\n\rCDAT >>");
break;
}
if ( memcmp(au8CmdBuf, "ho06", 4)==0 )
{
CT_UART_PutString("=====> ho06\n");
CT_OS_MonitorTimerDelete();
u8CmdCount=0;
memset(au8CmdBuf, 0, USRDEBUG_MAX_COMMAND_LENGTH);
CT_UART_PutString("\n\rCDAT >>");
break;
}
if ( memcmp(au8CmdBuf, "ho07", 4)==0 )
{
u8 *pTest;
u32 j = 0, k = 0;
CT_UART_PutString("=====> ho07\n");
pTest = (u8 *)au8Argv;
u8Argc = 0;
if (Usrdebug_ParseCommand(&au8CmdBuf[0], &u8Argc, pTest) == DRV_OK)
{
CT_OS_SetPriority (DHConvert(&(pTest[1 * DEBUG_MAX_ARGV_LENGTH])), DHConvert(&(pTest[2 * DEBUG_MAX_ARGV_LENGTH])));
}
/*
* Clean argv and argc.
*/
for (j = 0; j < u8Argc; j++)
{
for (k = 0; k < DEBUG_MAX_ARGV_LENGTH; k++)
{
au8Argv[j][k] = 0;
}
}
u8Argc = 0;
u8CmdCount=0;
memset(au8CmdBuf, 0, USRDEBUG_MAX_COMMAND_LENGTH);
CT_UART_PutString("\n\rCDAT >>");
break;
}
if ( memcmp(au8CmdBuf, "ho08", 4)==0 )
{
u8 *pTest;
u32 j = 0, k = 0;
CT_UART_PutString("=====> ho08\n");
pTest = (u8 *)au8Argv;
u8Argc = 0;
if (Usrdebug_ParseCommand(&au8CmdBuf[0], &u8Argc, pTest) == DRV_OK)
{
CT_OS_TrackingTask(TRUE, DHConvert(&(pTest[1 * DEBUG_MAX_ARGV_LENGTH])) );
}
/*
* Clean argv and argc.
*/
for (j = 0; j < u8Argc; j++)
{
for (k = 0; k < DEBUG_MAX_ARGV_LENGTH; k++)
{
au8Argv[j][k] = 0;
}
}
u8Argc = 0;
u8CmdCount=0;
memset(au8CmdBuf, 0, USRDEBUG_MAX_COMMAND_LENGTH);
CT_UART_PutString("\n\rCDAT >>");
break;
}
if ( memcmp(au8CmdBuf, "ho09", 4)==0 )
{
CT_UART_PutString("=====> ho09\n");
sprintf(au8String, "\nfd_point= %d", fd_point);
CT_UART_PutString(au8String);
u8CmdCount=0;
memset(au8CmdBuf, 0, USRDEBUG_MAX_COMMAND_LENGTH);
CT_UART_PutString("\n\rCDAT >>");
break;
}
#endif /* end #ifdef CTOS_ECOS */
#ifdef TFT_ENABLE
// for TFT debug tools
if(au8CmdBuf[0] == 't'/*DVB_DEBUG_TOOLS_START_BINARY_MODE_CMD*/)
{
// Enable
DVB_DebugTools(TRUE);
u8CmdCount=0;
memset(au8CmdBuf, 0, USRDEBUG_MAX_COMMAND_LENGTH);
// blocking inside, recive cmd to exit
Sys_DebugToolsCMD();
break;
}
#endif
if((u8CmdCount) < USRDEBUG_MAX_COMMAND_LENGTH)
{
au8CmdBuf[(u8CmdCount)++] = 0;
}
if(u8CmdCount>1)
{
if(EN_CTOS_SUCCESS!=CT_OS_FreeSemaphore(&AuUsrDebugSemore))
{
CT_UART_PutString("\r\n>>Error,CT_OS_FreeSemaphore");
}
}else
{
u8CmdCount=0;
memset(au8CmdBuf, 0, USRDEBUG_MAX_COMMAND_LENGTH);
while(CT_UART_Data_Ready()==DRV_OK)
{
CT_UART_ReadChar_NoCheck();
}
}
CT_UART_PutString("\n\rCDAT >>");
break;
case 0x1B:
CT_UART_PutString("\n\rCDAT >>");
u8CmdCount=0;
memset(au8CmdBuf, 0, USRDEBUG_MAX_COMMAND_LENGTH);
while(CT_UART_Data_Ready()==DRV_OK)
{
CT_UART_ReadChar_NoCheck();
}
break;
default :
if((u8CmdCount) < USRDEBUG_MAX_COMMAND_LENGTH)
{
au8CmdBuf[(u8CmdCount)++] = u8data;
CT_UART_PutChar(u8data);
}else
{
CT_UART_PutString("command buffer overflow\n");
}
break;
}
}
void DVB_DramDump(u32 u32address, u32 u32length)
{
u32 u32PageCount;
u32 u32ByteCount;
u32 u32PageStartAddr;
u32 u32PageEndAddr;
u32 u32CharStartAddr;
u32 u32CharEndAddr;
u32 u32CurrentAddr;
u32CharStartAddr = u32address ;
u32PageStartAddr = u32CharStartAddr & 0xFFFFFFF0L ;
u32CharEndAddr = u32CharStartAddr + u32length ;
u32PageEndAddr = (u32CharEndAddr + 15)&0xFFFFFFF0L ;
u32CurrentAddr = u32PageStartAddr;
CMD_OUT(("\n"));
for(u32PageCount=u32PageStartAddr; u32PageCount<u32PageEndAddr; u32PageCount=u32PageCount+16)
{
CMD_OUT(("%08lX : ",u32PageCount ));
for(u32ByteCount=0;u32ByteCount<16;u32ByteCount++)
{
if( (u32CurrentAddr < u32CharStartAddr) || (u32CharEndAddr <=u32CurrentAddr) )
{
CMD_OUT((" "));
}
else
{
CMD_OUT(("%02X ", *((u8 *)u32CurrentAddr) ));
}
u32CurrentAddr++ ;
}
CMD_OUT(("| "));
u32CurrentAddr -= 16 ;
for(u32ByteCount=0;u32ByteCount<16;u32ByteCount++)
{
if( (u32CurrentAddr < u32CharStartAddr) || (u32CharEndAddr <=u32CurrentAddr) )
{
CMD_OUT((" "));
}
else
{
if( (32 <= *((u8 *)u32CurrentAddr)) && ((*((u8 *)u32CurrentAddr)) <= 126) )
{
CMD_OUT(("%c",*((u8 *)u32CurrentAddr) ));
}
else
{
CMD_OUT(("."));
}
}
u32CurrentAddr++ ;
}
CMD_OUT(("\n"));
}
CMD_OUT(("\n"));
}
#ifdef TFT_ENABLE
void Sys_DebugToolsTimeout(void)
{
// Clear CMD buffer
u8CmdCount = 0;
memset(au8CmdBuf, 0, USRDEBUG_MAX_COMMAND_LENGTH);
}
u32 Sys_DebugToolsValueConverter(u8 *pu8Value)
{
if(pu8Value == NULL)
{
return 0;
}
return (u32)((pu8Value[0] << 24) + (pu8Value[1] << 16) + (pu8Value[2] << 8) + pu8Value[3]);
}
void Sys_DebugToolsCMD(void)
{
u8 u8Data;
u32 u32TimeOutTick = 0;
bool8 b8CMDReady = FALSE;
CT_OS_Local_Control_Interrupts(CTOS_DISABLE_INTERRUPTS);
CT_IRQ_Enable(INTR_UART_1);
while(TRUE)
{
// Get CMD byte by byte
while(CT_UART_Data_Ready() == DRV_OK)
{
// Recive first byte to start timeout
if(u8CmdCount == 0)
{
u32TimeOutTick = DVB_TimerGet();
}
u8Data = CT_UART_GetChar();
if((u8CmdCount) < USRDEBUG_MAX_COMMAND_LENGTH)
{
au8CmdBuf[(u8CmdCount)++] = u8Data;
}
// Get CMD
if( (u8Data == 0x0d) || // Get Other CMD
((au8CmdBuf[0] == 'e'/*DVB_DEBUG_TOOLS_END_BINARY_MODE_CMD*/) && (u8CmdCount == 1)) || // End Binary Mode CMD
((au8CmdBuf[0] == DVB_DEBUG_TOOLS_READ_DRAM_CMD) && (u8CmdCount == 5)) || // Read CMD
((au8CmdBuf[0] == DVB_DEBUG_TOOLS_WRITE_DRAM_CMD) && (u8CmdCount == 9))) // Write CMD
{
b8CMDReady = TRUE;
break;
}
}
// Porcess CMD
if(b8CMDReady == TRUE)
{
// Read CMD
if(au8CmdBuf[0] == DVB_DEBUG_TOOLS_READ_DRAM_CMD)
{
DVB_DebugToolsMem(TRUE, Sys_DebugToolsValueConverter(&au8CmdBuf[1]), 0);
}
// Write CMD
else if(au8CmdBuf[0] == DVB_DEBUG_TOOLS_WRITE_DRAM_CMD)
{
DVB_DebugToolsMem(FALSE, Sys_DebugToolsValueConverter(&au8CmdBuf[1]), Sys_DebugToolsValueConverter(&au8CmdBuf[5]));
}
// End Binary Mode and turn to ASCII Mode
else if(au8CmdBuf[0] == 'e'/*DVB_DEBUG_TOOLS_END_BINARY_MODE_CMD*/)
{
DVB_DebugTools(FALSE);
CT_IRQ_Clear(INTR_UART_1);
break; // exit this api
}
// Clear Info and Data
b8CMDReady = FALSE;
u32TimeOutTick = 0;
Sys_DebugToolsTimeout();
}
// Uncomplete CMD and wait time out
if((u32TimeOutTick != 0) && ((DVB_TimerGet() - u32TimeOutTick) >= DVB_DEBUG_TOOLS_TIMEOUT))
{
u32TimeOutTick = 0;
Sys_DebugToolsTimeout();
}
}
CT_OS_Local_Control_Interrupts(CTOS_ENABLE_INTERRUPTS);
}
void DVB_DebugTools(bool8 b8Flag)
{
bool8 b8Result = FALSE;
u8 au8Ack[4];
u32 u32Count = 0;
// TRUE: enable, FALSE: disable
b8Result = CT_UART_DebugTools(b8Flag);
if(b8Flag == TRUE)
{
au8Ack[u32Count++] = DVB_DEBUG_TOOLS_START_BINARY_MODE_CMD;
}
else
{
au8Ack[u32Count++] = DVB_DEBUG_TOOLS_END_BINARY_MODE_CMD;
}
if(b8Result == TRUE)
{
if(b8Flag == TRUE)
{
au8Ack[u32Count++] = DVB_DEBUG_TOOLS_START_BINARY_MODE_ACK;
}
else
{
au8Ack[u32Count++] = DVB_DEBUG_TOOLS_END_BINARY_MODE_ACK;
}
CT_UART_DebugToolsPutBuffer(au8Ack, u32Count);
// if setting uart normally, then enable/disable debug tools mode
_b8DebugTools = b8Flag;
}
else
{
if(b8Flag == TRUE)
{
au8Ack[u32Count++] = DVB_DEBUG_TOOLS_START_BINARY_MODE_ERROR;
}
else
{
au8Ack[u32Count++] = DVB_DEBUG_TOOLS_END_BINARY_MODE_ERROR;
}
CT_UART_DebugToolsPutBuffer(au8Ack, u32Count);
// if setting uart fail, then disable debug tools mode
_b8DebugTools = FALSE;
}
}
void DVB_DebugToolsMem(bool8 b8Read, u32 u32Address, u32 u32Value)
{
u8 au8Ack[8];
u32 u32Count = 0;
u32 u32MemValue = 0;
// write value to memory
if(b8Read == FALSE)
{
// 4 bytes alignment
if((u32Address & 0x03) != 0)
{
au8Ack[u32Count++] = DVB_DEBUG_TOOLS_WRITE_DRAM_CMD;
au8Ack[u32Count++] = DVB_DEBUG_TOOLS_WRITE_DRAM_CMD_ERROR;
CT_UART_DebugToolsPutBuffer(au8Ack, u32Count);
}
else
{
*(u32 *)u32Address = u32Value;
au8Ack[u32Count++] = DVB_DEBUG_TOOLS_WRITE_DRAM_CMD;
au8Ack[u32Count++] = DVB_DEBUG_TOOLS_WRITE_DRAM_COMPLETE_ACK;
CT_UART_DebugToolsPutBuffer(au8Ack, u32Count);
}
}
// read value from memory
else
{
// 4 bytes alignment
if((u32Address & 0x03) != 0)
{
au8Ack[u32Count++] = DVB_DEBUG_TOOLS_READ_DRAM_CMD;
au8Ack[u32Count++] = DVB_HIGH_BYTE(DVB_HIGH_WORD(u32Address));
au8Ack[u32Count++] = DVB_LOW_BYTE(DVB_HIGH_WORD(u32Address));
au8Ack[u32Count++] = DVB_HIGH_BYTE(DVB_LOW_WORD(u32Address));
au8Ack[u32Count++] = DVB_LOW_BYTE(DVB_LOW_WORD(u32Address));
au8Ack[u32Count++] = DVB_DEBUG_TOOLS_READ_DRAM_CMD_ERROR;
CT_UART_DebugToolsPutBuffer(au8Ack, u32Count);
}
else
{
u32MemValue = *((u32 *)u32Address);
au8Ack[u32Count++] = DVB_DEBUG_TOOLS_READ_DRAM_CMD;
au8Ack[u32Count++] = DVB_HIGH_BYTE(DVB_HIGH_WORD(u32MemValue));
au8Ack[u32Count++] = DVB_LOW_BYTE(DVB_HIGH_WORD(u32MemValue));
au8Ack[u32Count++] = DVB_HIGH_BYTE(DVB_LOW_WORD(u32MemValue));
au8Ack[u32Count++] = DVB_LOW_BYTE(DVB_LOW_WORD(u32MemValue));
au8Ack[u32Count++] = DVB_DEBUG_TOOLS_READ_DRAM_CMD_ACK;
CT_UART_DebugToolsPutBuffer(au8Ack, u32Count);
}
}
}
#endif
#ifdef PVR_ENABLE
#include "ap_ch_sw.h"
#define TEST_BUFFER_SIZE 512
void sys_debug_test(void)
{
u32 u32FileHandle = 0;
u32 u32FileSize = 0;
u32 u32ReadSize = 0;
u32 u32StartTicks = 0;
u32 u32EndTicks = 0;
u16 u16GB = 0;
u16 u16MB = 0;
u16 u16KB = 0;
u16 u16B = 0;
u8 au8Buf[TEST_BUFFER_SIZE];
u32FileHandle = DVB_FILECTRL_FileOpen(EN_USB_DEVICE, "00000068.TS", 'r');
if(u32FileHandle == 0)
{
printf(">> fopen fail\n");
return;
}
u32FileSize = DVB_FILECTRL_GetFileSize(EN_USB_DEVICE, u32FileHandle);
u16GB = u32FileSize / (1024 * 1024 * 1024);
u16MB = (u32FileSize - u16GB * (1024 * 1024 * 1024)) / (1024 * 1024);
u16KB = (u32FileSize - u16GB * (1024 * 1024 * 1024) - u16MB * (1024 * 1024)) / (1024);
u16B = (u32FileSize - u16GB * (1024 * 1024 * 1024) - u16MB * (1024 * 1024) - u16KB * 1024);
printf(">> fsize = %ld [%dGB, %dMB, %dKB, %dB]\n", u32FileSize, u16GB, u16MB, u16KB, u16B);
if(FALSE == DVB_FILECTRL_FileSeek(EN_USB_DEVICE, u32FileHandle, u32FileSize - TEST_BUFFER_SIZE, EN_FILE_CURRENT_FORWARD))
{
printf(">> fseek fail\n");
DVB_FILECTRL_FileClose(EN_USB_DEVICE, u32FileHandle);
return;
}
u32StartTicks = DVB_TimerGet();
printf(">> start fread [%ld]\n", u32StartTicks);
u32ReadSize = DVB_FILECTRL_FileRead(EN_USB_DEVICE, u32FileHandle, TEST_BUFFER_SIZE, au8Buf);
if(u32ReadSize == 0)
{
printf(">> fread fail\n");
}
u32EndTicks = DVB_TimerGet();
printf(">> end fread [%ld]\n", u32EndTicks);
printf(">> fread time [%ld]s\n", (u32EndTicks - u32StartTicks)/1000);
DVB_FILECTRL_FileClose(EN_USB_DEVICE, u32FileHandle);
}
// pvr
void sys_test_pvr_initial(void)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -