#ifndef CX_ZIVUOS_KERNEL_H_INCLUDED #define CX_ZIVUOS_KERNEL_H_INCLUDED #include #include #include #include "models.h" #include "process.h" #include "scheduler.h" #include "result.h" typedef struct zv_kernel_s { size_t processes_count; zv_process_t *processes; zv_pid_t last; zv_scheduler_mode_t mode; zv_pid_t interrupts; zv_priority_t lowest_priority; } zv_kernel_t; void zv_kernel_init( zv_kernel_t *, zv_process_t *, zv_pid_t ); zv_pid_t zv_kernel_add_process( zv_kernel_t *, zv_worker_t, zv_universal_t, zv_priority_t ); void __zv_kernel_clean_balance(zv_kernel_t *); void zv_idle_task(); zv_result_t zv_kernel_trigger_process(zv_kernel_t *, zv_pid_t); static inline zv_process_t * __zv_kernel_get_process( zv_kernel_t *self, zv_pid_t target ) { if (self->processes_count <= target) { return NULL; } return self->processes + target; } static inline zv_pid_t zv_kernel_get_pid( zv_kernel_t *self, zv_process_t *target ) { return (zv_pid_t) (target - self->processes); } #endif