async_test for test

Dependencies:   mbed-src

Homepage

This is about asynchronous uart output.

When I need to debug my software in a ISR or a task(thread), I worried that printf() might cause some abnormal result.

So, I made my uart output function like printf().

Initialize async_print

title

void timerfunction_async_print()
{
    char c=0;

    while ( buffer_async_print.available() ) {
        buffer_async_print.dequeue(&c);
        pc.putc(c);
    }
    timer_async_print.attach(&timerfunction_async_print, 0.1);
}

void async_print(const char *format, ...)
{
    va_list args;
    
    va_start(args, format);
    
    vsnprintf(debug_line, sizeof(debug_line), format, args);
    int length = strlen(debug_line);
    
    for (int i=0; i<length; i++)
        buffer_async_print.queue(debug_line[i]);
    
    va_end(args);
}


int main()
{
    .....................................................

    // Initialize AsyncPrint
    timer_async_print.attach(&timerfunction_async_print, 0.1);
    p_async_print = &async_print;
    
    .....................................................
}

Implementation async_print

void (*p_async_print)(const char *format, ...);

void UART0_Handler()
{
    p_async_print("IRQ : UART_IT_FLAG_RXI \r\n");
    uart_irq(UART_0, 0);
}


All wikipages