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

📄 printdbg.c

📁 嵌入式应用的简易printf实现
💻 C
字号:
/*
printdebug.c


*/
#include <stdarg.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>

#include"printdbg.h"
#define UART0_DEBUG
int uart0_send_string(unsigned char*string,int len)
{

	int i;
	#ifdef UART0_DEBUG
	for(i=0;i<len;i++)
	{
		while(!SciaTx_Ready());
		SciaRegs.SCITXBUF =string[i];
	}
	#endif
	return i;
	
}
int uart0_send_char(unsigned char ch)
{

	#ifdef UART0_DEBUG

	while(!SciaTx_Ready());
	SciaRegs.SCITXBUF =ch;
	#endif
	return 1;
	
}


char *itoa(int value, char *string, int radix)
{
    int     i, d;
    int     flag = 0;
    char    *ptr = string;

    /* This implementation only works for decimal numbers. */
    if (radix != 10)
    {
        *ptr = 0;
        return string;
    }

    if (!value)
    {
        *ptr++ = 0x30;
        *ptr = 0;
        return string;
    }

    /* if this is a negative value insert the minus sign. */
    if (value < 0)
    {
        *ptr++ = '-';

        /* Make the value positive. */
        value *= -1;
    }

    for (i = 10000; i > 0; i /= 10)
    {
        d = value / i;

        if (d || flag)
        {
            *ptr++ = (char)(d + 0x30);
            value -= (d * i);
            flag = 1;
        }
    }

    /* Null terminate the string. */
    *ptr = 0;

    return string;

} /* NCL_Itoa */
char *utohex(unsigned int value, char *string, int radix)
{
	int     i, d,shift;
	unsigned int cval,mask;
    char    *ptr = string;
	/* This implementation only works for decimal numbers. */
    if (radix != 16)
    {
        *ptr = 0;
        return string;
    }
    i=0;
    shift=12;
	cval=value;
	mask = 0xffff;
    for(i=0;i<4;i++)
    {
    	d=cval>>shift;
		cval &= (mask>>(16-shift));
		
    	if(d > 9 )
    		d = d+0x57;
    	else
    		d+=0x30;
    	string[i]=d;
    	
    	shift -=4;
    	
    }
    
    return string;
	
}
void uprintf(const char *fmt, ...)
{
    const char *s;
    int d,i;
    unsigned int x;
    char buf[16];
    va_list ap;
    va_start(ap, fmt);
    while (*fmt) {
        if (*fmt != '%') 
        {
            uart0_send_char(*fmt++);
            continue;
        }
        switch (*++fmt) {
            case 's':
                s = va_arg(ap, const char *);
                for ( ; *s; s++) {
                    uart0_send_char(*s);
                }
                break;
            case 'd':
                d = va_arg(ap, int);
                itoa(d, buf, 10);
                for (s = buf; *s; s++) {
                    uart0_send_char(*s);
                }
                break;
            case 'x':
                x = va_arg(ap, int);
                utohex(x, buf, 16);
                for (i=0; i<4;i++) {
                    uart0_send_char(buf[i]);
                }
                break;
            /* Add other specifiers here... */              
            default:  
                uart0_send_char(*fmt);
                break;
        }
        fmt++;
    }
    va_end(ap);
    return ;   /* Dummy return value */
}
void logPrint(void)
{
	uprintf("\r\n===========================================================");
	uprintf("\r\n==TMS2812 print demo program.                            ==");
	uprintf("\r\n==version:1.0                                            ==");
	uprintf("\r\n==contect:yang_tch@163.com                               ==");
	uprintf("\r\n==2008.5.29                                              ==");
	uprintf("\r\n===========================================================");

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -