Merge pull request #13985 from maribu/stdio_from_isr
sys/stdio_uart: Add warning about use in ISR
This commit is contained in:
commit
2df96e033e
@ -19,6 +19,34 @@
|
|||||||
* USEMODULE += stdin
|
* 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
|
* @file
|
||||||
*
|
*
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user