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

📄 my_printf.c

📁 ARM7 的Bootloader
💻 C
字号:
/* * my_printf.c * * */#include <stdarg.h>#include "my_printf.h"#include "uart.h"void output_int( unsigned int num, const int base ){	const char *digit = "0123456789ABCDEF";	unsigned int buf[32];		int i = 0;		if (base == 10) 	{			do		{			buf[i] = num % 10;			num = num / 10;			i++;		} while ( num > 0 );	}	else	{		do		{			buf[i] = num % 16;			num = num / 16;			i++;		} while ( num > 0 );	}	while ( --i >= 0 )		{		uart_putchar( UART0_BASE, digit[ buf[i] ] );	}}void my_printf( char *fmt_buf, ... ){	va_list unnamed_p;	/* point to named argument */	char *p, *sval;	unsigned int value_i;	/* 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;		default:			uart_putchar( UART0_BASE, *p );			break;		}	}	va_end( unnamed_p );}

⌨️ 快捷键说明

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