FastLED 3.9.15
Loading...
Searching...
No Matches
Async Logging (ISR-Safe)

Detailed Description

ISR-safe logging using ring buffers for deferred output.

Async logging enables safe logging from interrupt service routines (ISRs) by queueing messages in a ring buffer and draining them later from the main thread. This prevents watchdog timeouts caused by slow Serial I/O operations inside ISRs.

Automatic Servicing (Recommended): Async loggers are automatically serviced by fl::task system when using fl::delay(). No manual service calls required!

void IRAM_ATTR my_isr_handler() {
FL_LOG_PARLIO_ASYNC_ISR("DMA complete"); // ISR-safe (const char* only)
}
void loop() {
FL_LOG_PARLIO_ASYNC_MAIN("Processing batch " << batch_id); // Main thread
fl::delay(10); // Loggers serviced automatically every 16ms (60fps)!
}
void loop()
#define FL_LOG_PARLIO_ASYNC_MAIN(X)
Definition log.h:652
#define FL_LOG_PARLIO_ASYNC_ISR(X)
Definition log.h:651
void delay(u32 ms, bool run_async=true) FL_NOEXCEPT
Public delay wrapper that keeps bare Arduino delay() preferred after using fl::delay; while still all...
Definition delay.h:98

Manual Control (Optional): For fine-grained control, you can still manually service or flush loggers:

void loop() {
fl::async_log_service(); // Manual service (for legacy timer-based flush)
FL_LOG_PARLIO_ASYNC_FLUSH(); // Flush PARLIO immediately (all queued messages)
}
#define FL_LOG_PARLIO_ASYNC_FLUSH()
Definition log.h:653
void async_log_service()

Custom Configuration (Optional): Configure service interval and messages-per-tick BEFORE first logger access:

void setup() {
fl::configureAsyncLogService(50, 10); // 50ms interval, 10 msgs/tick
FL_LOG_PARLIO_ASYNC_MAIN("Setup complete"); // Task auto-instantiates here
}
void setup()
void configureAsyncLogService(u32 interval_ms, fl::size messages_per_tick)
Configure async logger automatic servicing task.

Memory Footprint (Zero Heap Allocation):

Thread Safety:

Namespaces

namespace  fl
 Base definition for an LED controller.
 

Macros

#define FL_LOG_ASYNC(logger, X)
 Generic async logging macro (captures stream expression into string)
 
#define FL_LOG_ASYNC_ISR(logger, msg)
 
#define FL_LOG_AUDIO_ASYNC_FLUSH()
 
#define FL_LOG_AUDIO_ASYNC_ISR(X)
 
#define FL_LOG_AUDIO_ASYNC_MAIN(X)
 
#define FL_LOG_FLEXIO_ASYNC_FLUSH()
 
#define FL_LOG_FLEXIO_ASYNC_ISR(X)
 
#define FL_LOG_FLEXIO_ASYNC_MAIN(X)
 
#define FL_LOG_INTERRUPT_ASYNC_FLUSH()
 
#define FL_LOG_INTERRUPT_ASYNC_ISR(X)
 
#define FL_LOG_INTERRUPT_ASYNC_MAIN(X)
 
#define FL_LOG_OBJECTFLED_ASYNC_FLUSH()
 
#define FL_LOG_OBJECTFLED_ASYNC_ISR(X)
 
#define FL_LOG_OBJECTFLED_ASYNC_MAIN(X)
 
#define FL_LOG_PARLIO_ASYNC_FLUSH()
 
#define FL_LOG_PARLIO_ASYNC_ISR(X)
 
#define FL_LOG_PARLIO_ASYNC_MAIN(X)
 
#define FL_LOG_RMT_ASYNC_FLUSH()
 
#define FL_LOG_RMT_ASYNC_ISR(X)
 
#define FL_LOG_RMT_ASYNC_MAIN(X)
 
#define FL_LOG_SPI_ASYNC_FLUSH()
 
#define FL_LOG_SPI_ASYNC_ISR(X)
 
#define FL_LOG_SPI_ASYNC_MAIN(X)