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

📄 trace.c

📁 modem数据通信源码
💻 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 + -