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

📄 my_printf.c

📁 uboot底层驱动
💻 C
字号:
/* *	my_printf.c   - a sample printf  *	 *	Author: 	 <zgxgoo@gmail.com> *	Date:		2007-10-31 */#include <stdarg.h>#include "my_printf.h"#include "uart.h"/* * transfer the num to 10 or 16 and ouput it */void output_int( unsigned int num, const int base ){	const char *digit = "0123456789ABCDEF";	unsigned int buf[32];		int i = 0;		/*transfer the num to 10*/	if (base == 10) 	{			do		{			buf[i] = num % 10;			num = num / 10;			i++;		} while ( num > 0 );	}	/*transfer the num to 16*/	if (base == 16)	{		do		{			buf[i] = num % 16;			num = num / 16;			i++;		} while ( num > 0 );	}		while ( --i >= 0 )		{		uart_putchar( UART0_BASE, digit[ buf[i] ] );	}}void output_float ( float i){	const char *digit = "0123456789ABCDEF";	unsigned int buf[32];	float k = i;	int numb, j, kk;		j = i;	numb = 0;		for (; k*10 != (float) j*10; )	{		k = k*10;		j = k;		numb++;	}		kk = 0;		do	{			buf[kk] = j % 10;			j = j / 10;			kk++;	} while ( j > 0 );		for (; --kk >= 0; )		{		uart_putchar( UART0_BASE, digit[ buf[kk] ] );		if ( kk == numb )			uart_putchar( UART0_BASE, '.');	}	if ( numb == 0 )		uart_putchar( UART0_BASE, '0' );		}			void my_printf( char *fmt_buf, ... ){	va_list unnamed_p;	/* point to named argument */	char *p, *sval;	unsigned int value_i;	double value_j;	/* unnamed_p point to first unnamed argument */	va_start( unnamed_p, fmt_buf );	for ( p=fmt_buf; *p; p++ )	{		if ( *p != '%' )		{			uart_putchar( UART0_BASE, *p );			continue;		}		switch ( *++p )		{		case 'd':			value_i = va_arg( unnamed_p, unsigned int );					output_int( value_i, 10 );			break;		case 's':			for (sval = va_arg( unnamed_p, char*); *sval; sval++)				uart_putchar( UART0_BASE, *sval );			break;		case 'x':			value_i = va_arg( unnamed_p, unsigned int );					output_int( value_i, 16 );			break;				case 'f':			value_j = va_arg( unnamed_p, double);			output_float( value_j );			break;		default:			uart_putchar( UART0_BASE, *p );			break;		}	}	va_end( unnamed_p );}	

⌨️ 快捷键说明

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