Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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); }