kernel.h 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #ifndef CX_ZIVUOS_KERNEL_H_INCLUDED
  2. #define CX_ZIVUOS_KERNEL_H_INCLUDED
  3. #include <stdint.h>
  4. #include <stddef.h>
  5. #include <stdbool.h>
  6. #include "models.h"
  7. #include "process.h"
  8. #include "scheduler.h"
  9. #include "result.h"
  10. typedef struct zv_kernel_s {
  11. size_t processes_count;
  12. zv_process_t *processes;
  13. zv_pid_t last;
  14. zv_scheduler_mode_t mode;
  15. zv_pid_t interrupts;
  16. zv_priority_t lowest_priority;
  17. } zv_kernel_t;
  18. void zv_kernel_init(
  19. zv_kernel_t *,
  20. zv_process_t *,
  21. zv_pid_t
  22. );
  23. zv_pid_t zv_kernel_add_process(
  24. zv_kernel_t *,
  25. zv_worker_t,
  26. zv_universal_t,
  27. zv_priority_t
  28. );
  29. void __zv_kernel_clean_balance(zv_kernel_t *);
  30. void zv_idle_task();
  31. zv_result_t zv_kernel_trigger_process(zv_kernel_t *, zv_pid_t);
  32. static inline zv_process_t * __zv_kernel_get_process(
  33. zv_kernel_t *self,
  34. zv_pid_t target
  35. ) {
  36. if (self->processes_count <= target) {
  37. return NULL;
  38. }
  39. return self->processes + target;
  40. }
  41. static inline zv_pid_t zv_kernel_get_pid(
  42. zv_kernel_t *self,
  43. zv_process_t *target
  44. ) {
  45. return (zv_pid_t) (target - self->processes);
  46. }
  47. #endif