9#include "hardware/sync.h"
11#define LOG_QUEUE_DEPTH 128U
12#define LOG_QUEUE_MASK (LOG_QUEUE_DEPTH - 1U)
13#define LOG_LINE_MAX 160U
17#if defined(__arm__) || defined(__thumb__)
18#if defined(__clang__) && defined(__has_builtin)
19#if __has_builtin(__builtin_arm_sev)
22 __asm
volatile(
"sev" :::
"memory");
25 __asm
volatile(
"sev" :::
"memory");
34#if (LOG_QUEUE_DEPTH & LOG_QUEUE_MASK) != 0
35#error "LOG_QUEUE_DEPTH must be power of two"
58 .high_water_mark = 0U,
59 .log_emitted =
false};
81 int written = vsnprintf(line,
sizeof(line), fmt, args);
128 (void)fflush(stdout);
log_level_t
Log verbosity levels.
static void log_wake_core1(void)
void log_write(log_level_t level, const char *fmt,...)
Emit one formatted log message if level is enabled.
log_level_t get_loglevel(void)
Get current global log level.
void log_core1_drain(void)
bool log_take_emitted_flag(void)
Atomically read and clear "log emitted" flag.
uint32_t log_take_dropped_count(void)
void set_loglevel(log_level_t level)
Set current global log level.
static global_log_state_t global_logstate
uint32_t log_get_high_water_mark(void)
log_entry_t queue[LOG_QUEUE_DEPTH]
log_level_t current_log_level
volatile uint32_t dropped
volatile uint32_t high_water_mark