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).

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:

true if 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.

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.