STDIO over UART

Standard input/output backend using UART. More...

Detailed Description

Standard input/output backend using UART.

Warning
Standard input is disabled by default on UART. To enable it, load the stdin module in your application:
USEMODULE += stdin
Attention
Using STDIO over UART from interrupt context should be avoided, except for debugging purposes

For testing purposes and using STDIO within an ISR should mostly work good enough and for some platforms even reliable. Production code however should fully avoid any access to STDIO from interrupt context. Instead, e.g. an event could be posted to an Event Queue and the actual STDIO operation being deferred to thread context.

Some reasons why STDIO over UART from ISR should be avoided:

  1. UART is slow and the system easily remains in interrupt context for unacceptable long time.
    • E.g. sending 100 chars at 9600 baud will block the system for 100 milliseconds.
    • Missed deadlines, lost interrupts, or watch dog timer resets can easily be caused by this.
  2. Even if DMA is used for UART, using STDIO within ISR can cause significant delays: If the buffer is full, an UART implementation will be forced to resort to synchronously send the data, rather than using DMA. This might cause even more headache, as the available memory in the DMA buffer when an ISR is triggered has to be assumed as randomly distributed. Thus, hard to reproduce and indeterministic bugs can be the result.
  3. If an ISR is triggered from a power saving mode, some peripherals or clock domains might still be offline during that ISR; including the UART peripheral. This is a valid implementation choice to allow time critical low power scenarios being covered by RIOT. Thus, be prepared to loose output when using STDIO from ISR.

Files

file  stdio_uart.h
 

Macros

#define STDIO_UART_DEV   UART_DEV(0)
 UART device to use for STDIO.
 
#define STDIO_UART_BAUDRATE   (115200)
 Baudrate for STDIO.
 
#define STDIO_UART_RX_BUFSIZE   (64)
 Buffer size for STDIO.