📄 trace.c
字号:
#include "trace.h"
#include "44b.H"
#include "EPT32.H"
#include "Nucleus.H"
#include "string.h"
#include "switch.h"
#include "interdrive.h"
#include "common_exp.h"
#include "ISOModem_DRV.h"
#include "Modem_IODrv.h"
#include "ISOModem.h"
#include "exports.h"
#include "IODrive.h"
#include "Regist.h"
void TRACE_BYTE(char data);
void TRACE_BYTE(char data)
{
/*if(data=='\n')//换行必须加回车
{
while(!(rUTRSTAT0 & 0x2));
WrUTXH0('\r');
}*/
while(!(rUTRSTAT0 & 0x2)); //Wait until THR is empty.
WrUTXH0(data);
}
void TRACE_STRING(char *pt);
void TRACE_STRING(char *pt)
{
while(*pt)
TRACE_BYTE(*pt++);
}
void TRACE(const char *format,...)
{
va_list argptr;
char buffer[8192]; //be care of not overflow
va_start(argptr,format);
vsprintf(buffer,format,argptr);
va_end(argptr);
TRACE_STRING(buffer);
}
void TRACE_CONTENTS(int iLength, const void *pvData)
{
#define SOURCESIZE 128
#define PrintData uprintf
const unsigned char *pcData = (const unsigned char *)pvData;
char SourceBuf[SOURCESIZE];
int i;
const char Head1[] = "┌──────────────────────────────────────┐";
const char Head2[] = "│ OFFSET 0 1 2 3 4 5 6 7 8 9 A B C D E F 0123456789ABCDEF│";
const char Head3[] = "├──────────────────────────────────────┤";
const char Head4[] = "└──────────────────────────────────────┘";
unsigned int temp, k, m;
char *AddrPoint, *HexPoint;
i = 0;
AddrPoint = SourceBuf;
sprintf(SourceBuf, "│%08x: ", i);
temp = strlen(SourceBuf);
HexPoint = SourceBuf + temp;
// 显示标题
PrintData("TRACE LEN=%d\r\n",iLength);
PrintData("\r\n%s", Head1);
PrintData("\r\n%s", Head2);
PrintData("\r\n%s\r\n", Head3);
for (i = 0; i < iLength;)
{
sprintf(AddrPoint, "│%08x: ", i);
// 计算一次可显示数据长度
k = iLength - i > 16 ? 16 : iLength - i;
// 显示前面16进制数据
for (m = 0; m < k; m++)
{
sprintf(&HexPoint[m*3], "%02X ", pcData[i+m]);
}
for (; m < 16; m++)
{
memset(&HexPoint[m*3], ' ', 3);
}
HexPoint[16*3] = ' ';
HexPoint[16*3+1] = ' ';
// 显示正常数据
for (m = 0; m < k; m++)
{
HexPoint[16*3 + 2 + m] = pcData[i+m] > 0x20 ? pcData[i+m] : ' ';
}
for (; m < 16; m++)
{
HexPoint[16*3 + 2 + m] = ' ';
}
strcpy(&HexPoint[16*3 + 2 + 16], "│\r\n");
i += k;
// 显示数据
PrintData("%s", SourceBuf);
}
PrintData("%s\r\n", Head4);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -