/** * @file kernel.h * @brief Core kernel definitions and types for Automotive RTOS * @author Automotive RTOS Team * @version 1.0 */ #ifndef KERNEL_H #define KERNEL_H #include #include /* Kernel Version */ #define KERNEL_VERSION_MAJOR 1 #define KERNEL_VERSION_MINOR 0 #define KERNEL_VERSION_PATCH 0 /* Configuration Constants */ #define MAX_TASKS 32 #define MAX_PRIORITY_LEVELS 16 #define MAX_TASK_NAME_LENGTH 16 #define IDLE_TASK_PRIORITY (MAX_PRIORITY_LEVELS - 1) /* Task States */ typedef enum { TASK_SUSPENDED = 0, TASK_READY = 1, TASK_RUNNING = 2, TASK_BLOCKED = 3, TASK_TERMINATED = 4 } TaskState_t; /* Task Priority Type */ typedef uint8_t TaskPriority_t; /* Task Handle */ typedef struct TaskControlBlock* TaskHandle_t; /* Task Function */ typedef void (*TaskFunction_t)(void* parameters); /* Time Types */ typedef uint32_t TickType_t; typedef uint32_t TimeOut_t; /* Error Codes */ typedef enum { KERNEL_OK = 0, KERNEL_ERROR = -1, KERNEL_INVALID_PARAMETER = -2, KERNEL_OUT_OF_MEMORY = -3, KERNEL_TASK_NOT_FOUND = -4, KERNEL_PRIORITY_INVALID = -5, KERNEL_TIMEOUT = -6, KERNEL_RESOURCE_BUSY = -7 } KernelStatus_t; /* Task Creation Parameters */ typedef struct { const char* name; TaskFunction_t function; void* parameters; uint32_t stack_size; TaskPriority_t priority; TickType_t period_ticks; /* 0 for aperiodic tasks */ } TaskConfig_t; /* Task Statistics */ typedef struct { uint32_t execution_count; TickType_t last_execution_time; TickType_t max_execution_time; TickType_t total_execution_time; uint32_t stack_high_water_mark; uint32_t deadline_misses; } TaskStatistics_t; /* Kernel Core Functions */ KernelStatus_t kernel_init(void); KernelStatus_t kernel_start(void); void kernel_stop(void); TickType_t kernel_get_tick_count(void); KernelStatus_t kernel_delay(TickType_t ticks); /* Task Management Functions */ TaskHandle_t task_create(const TaskConfig_t* config); KernelStatus_t task_delete(TaskHandle_t task); KernelStatus_t task_suspend(TaskHandle_t task); KernelStatus_t task_resume(TaskHandle_t task); KernelStatus_t task_set_priority(TaskHandle_t task, TaskPriority_t new_priority); TaskPriority_t task_get_priority(TaskHandle_t task); TaskState_t task_get_state(TaskHandle_t task); KernelStatus_t task_get_statistics(TaskHandle_t task, TaskStatistics_t* stats); /* Scheduler Control */ void scheduler_yield(void); void scheduler_lock(void); void scheduler_unlock(void); TaskHandle_t scheduler_get_current_task(void); #endif /* KERNEL_H */