| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- #ifndef CX_ZIVUOS_KERNEL_H_INCLUDED
- #define CX_ZIVUOS_KERNEL_H_INCLUDED
- #include <stdint.h>
- #include <stdbool.h>
- #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
|