Scheduler
Fixed-priority cooperative task scheduler with WCET tracking.
Header: core/ecu_scheduler.h
-
enum sched_priority_t
Task priority levels (lower value = higher priority).
Values:
-
enumerator SCHED_PRIO_CRITICAL
Safety-critical (e.g. control loop).
-
enumerator SCHED_PRIO_HIGH
High priority (e.g. watchdog).
-
enumerator SCHED_PRIO_MEDIUM
Medium priority (e.g. telemetry).
-
enumerator SCHED_PRIO_LOW
Low priority (e.g. housekeeping).
-
enumerator SCHED_PRIO_CRITICAL
-
typedef void (*sched_task_fn)(void *ctx)
Task function signature.
-
void ecu_sched_init(ecu_scheduler_t *sched)
Initialise the scheduler.
- Parameters:
sched – [out] Scheduler context.
-
int ecu_sched_add(ecu_scheduler_t *sched, const char *name, sched_task_fn fn, void *ctx, sched_priority_t prio, uint32_t interval_ms)
Register a periodic task.
- Parameters:
sched – [inout] Scheduler context.
name – [in] Task name (pointer must remain valid).
fn – [in] Task function.
ctx – [in] User context passed to
fn.prio – [in] Task priority.
interval_ms – [in] Execution interval in milliseconds.
- Returns:
Task index on success, or -1 if the table is full.
-
void ecu_sched_tick(ecu_scheduler_t *sched, uint32_t now_ms)
Execute one scheduler tick.
Runs all tasks whose interval has elapsed, in priority order.
- Parameters:
sched – [inout] Scheduler context.
now_ms – [in] Current time in milliseconds.
-
uint32_t ecu_sched_get_wcet(const ecu_scheduler_t *sched, int task_idx)
Get worst-case execution time for a task.
- Parameters:
sched – [in] Scheduler context.
task_idx – [in] Task index (from ecu_sched_add()).
- Returns:
WCET in microseconds.
-
bool ecu_sched_any_overrun(const ecu_scheduler_t *sched)
Check if any task has experienced an overrun.
- Parameters:
sched – [in] Scheduler context.
- Returns:
trueif any task has overrun its interval.
-
SCHED_MAX_TASKS
Maximum registered tasks.
-
struct sched_task_t
- #include <ecu_scheduler.h>
Registered task descriptor.
Public Members
-
const char *name
Human-readable task name.
-
sched_task_fn fn
Task function pointer.
-
void *ctx
User context for
fn.
-
sched_priority_t priority
Execution priority.
-
uint32_t interval_ms
Execution interval (ms).
-
uint32_t last_run_ms
Timestamp of last execution.
-
uint32_t worst_case_us
Worst-case execution time (us).
-
uint32_t run_count
Total executions.
-
bool overrun
Set if interval was exceeded.
-
const char *name
-
struct ecu_scheduler_t
- #include <ecu_scheduler.h>
Scheduler context.
Public Members
-
sched_task_t tasks[8]
Registered tasks.
-
int task_count
Number of registered tasks.
-
uint32_t tick_ms
Current tick time.
-
sched_task_t tasks[8]