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.
You are viewing an older revision! See the latest version
Homepage
This is about asynchronous uart output.
When I need to debug my software in ISR or task, I worried that printf() might cause some abnormal result.
So, I made asynchronous function like printf().
Initialize¶
my application
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¶
print in ISR
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);
}