#ifndef CX_ZIVUOS_KERNEL_H_INCLUDED #define CX_ZIVUOS_KERNEL_H_INCLUDED #include #include #include "zv_types.h" #include "task.h" /** * @brief That return number of tasks from tasks array (x for zv_task_t [x]). * Usefull for zv_kernel_init */ #define ZV_COUNT_TASKS(X) (sizeof(X) / sizeof(zv_task_t)) /** * @brief That is main kernel structure. * It store pointer to tasks stack, and size of that stack. */ typedef struct zv_kernel_s { /** Pointer to tasks stack. */ zv_task_t *tasks; /** Size of tasks stack. */ zv_tid_t tasks_count; } zv_kernel_t; /** * @brief That initialize kernel structure. * @param self Pointer to kernel structure to work on. * @param tasks Pointer to tasks stack. * @param count Number of tasks slots on stack. */ void zv_kernel_init(zv_kernel_t *self, zv_task_t *tasks, zv_tid_t count); /** * @brief That boot OS. It return when task stack is empty. * @return True when everything is executed, and all tasks had been killed. * False when something went wrong. */ 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 ); void 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