void uart_putc(char c);
int printf(char *fmt, ...)
{
va_list args;
int i;
char *s;
va_start(args, fmt);
for (i = 0; fmt[i]; i++)
{
if (fmt[i] == '%')
{
switch (fmt[i + 1])
{
case 'c':
c = va_arg(args, int);
uart_putc(c);
break;
case 's':
s = va_arg(args, char *);
while (*s)
{
uart_putc(*s);
s++;
}
break;
case 'd':
i = va_arg(args, int);
if (i < 0)
{
uart_putc('-');
i = -i;
}
printf("%d", i);
break;
// 其他格式化选项
}
i++;
}
else
{
uart_putc(fmt[i]);
}
}
va_end(args);
} |