/** * @file scheduler.h * @brief Priority-based preemptive scheduler */ #ifndef SCHEDULER_H #define SCHEDULER_H #include "kernel.h" #include "task.h" /* Scheduler Types */ typedef enum { SCHEDULER_PRIORITY_PREEMPTIVE = 0, SCHEDULER_ROUND_ROBIN = 1, SCHEDULER_EDF = 2, /* Earliest Deadline First */ SCHEDULER_RATE_MONOTONIC = 3 } SchedulerType_t; /* Scheduler Configuration */ typedef struct { SchedulerType_t type; TickType_t time_slice_ticks; /* For round-robin */ bool enable_deadline_monitoring; } SchedulerConfig_t; /* Scheduler Interface */ void scheduler_init(const SchedulerConfig_t* config); void scheduler_start(void); void scheduler_tick(void); void scheduler_add_task(TaskHandle_t task); void scheduler_remove_task(TaskHandle_t task); void scheduler_update_task_state(TaskHandle_t task, TaskState_t new_state); TaskHandle_t scheduler_select_next_task(void); void scheduler_context_switch(TaskHandle_t next_task); /* Scheduler Statistics */ typedef struct { uint32_t context_switches; uint32_t preemptions; TickType_t max_scheduling_latency; TickType_t total_idle_time; } SchedulerStatistics_t; void scheduler_get_statistics(SchedulerStatistics_t* stats); #endif /* SCHEDULER_H */