Embedded processor implements scanf and printf through UART

#include <stdint.h>
#include <stdarg.h>

extern int vsscanf (const char *, const char *, va_list);
extern int vsprintf (const char *, const char *, va_list);

int uart_scanf(const char *fmt, ...)
{
    int i = 0;
    unsigned char ch;
    char buf[80];
    va_list args;

    while(1) {
        ch = uart_getchar();
        uart_putchar(ch);
        if(ch == '\n' || ch == '\r') {
            buf[i] = '\0';
            break;
        } else {
            buf[i++] = ch;
        }
    }

    va_start(args, fmt);
    i = vsscanf(buf, fmt, args);
    va_end(args);
    uart_putchar('\r');
    uart_putchar('\n');
    return i;
}

int uart_printf(const char *fmt, ...)
{
    int i = 0;
    unsigned int n = 0;
    char buf[80];
    va_list args;

    va_start(args, fmt);
    n = vsprintf(buf, fmt, args);
    va_end(args);

    for(i = 0; i < n; ++i) {
        uart_putchar(buf[i]);
    }
    return n;
}

int main(void)
{
    char str[10];
    int a, b, c;
    int n;
    while((n = uart_scanf("%s%d%d%d", str, &a, &b, &c)) != -1) {
        uart_printf("%d Arguments. str = %s, a = %d, b = %d, c = %d\r\n", n, str, a, b, c);
    }
    return 0;
}

 

Guess you like

Origin www.cnblogs.com/lyuyangly/p/11261619.html