async_test for test
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);
}