| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- #ifndef CX_ZIVUOS_KERNEL_H_INCLUDED
- #define CX_ZIVUOS_KERNEL_H_INCLUDED
- #include <stdint.h>
- #include <stddef.h>
- #include <stdbool.h>
- #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_kernel_idle_task();
- bool zv_kernel_set_scheduler(zv_kernel_t *, zv_scheduler_mode_t);
- 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
|