Merge pull request #13985 from maribu/stdio_from_isr

sys/stdio_uart: Add warning about use in ISR
This commit is contained in:
Kaspar Schleiser 2020-06-24 00:01:46 +02:00 committed by GitHub
commit 2df96e033e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -19,6 +19,34 @@
* 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 @ref sys_event 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.
*
* @{
* @file
*