#ifndef CX_ZIVUOS_KERNEL_H_INCLUDED #define CX_ZIVUOS_KERNEL_H_INCLUDED #include #include #include "zv_types.h" #include "task.h" #define ZV_COUNT_TASKS(X) (sizeof(X) / sizeof(zv_task_t)) typedef enum zv_scheduler_mode_e { ZV_SCHEDULER_BASIC, ZV_SCHEDULER_PRIORITY_STRICT, ZV_SCHEDULER_PRIORITY_AGING, } zv_scheduler_mode_t; typedef struct zv_kernel_s { zv_scheduler_mode_t scheduler; zv_task_t *tasks; zv_tid_t tasks_count; } zv_kernel_t; bool zv_kernel_init(zv_kernel_t *self, zv_task_t *tasks, zv_tid_t count); bool zv_kernel_boot(zv_kernel_t *self); zv_tid_t zv_kernel_create_process( zv_kernel_t *self, zv_worker_t worker, zv_priority_t priority, void *param ); bool zv_kernel_kill_process( zv_kernel_t *self, zv_tid_t target ); zv_tid_t __zv_kernel_get_empty_slot(zv_kernel_t *self); zv_task_t * __zv_kernel_get_task(zv_kernel_t *self, zv_tid_t target); zv_tid_t __zv_kernel_get_tid(zv_kernel_t *self, zv_task_t *target); #endif