kernel.h 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #ifndef CX_ZIVUOS_KERNEL_H_INCLUDED
  2. #define CX_ZIVUOS_KERNEL_H_INCLUDED
  3. #include <stdint.h>
  4. #include <stdbool.h>
  5. #include "zv_types.h"
  6. #include "task.h"
  7. /**
  8. * @brief That return number of tasks from tasks array (x for zv_task_t [x]).
  9. * Usefull for zv_kernel_init
  10. */
  11. #define ZV_COUNT_TASKS(X) (sizeof(X) / sizeof(zv_task_t))
  12. /**
  13. * @brief That is main kernel structure.
  14. * It store pointer to tasks stack, and size of that stack.
  15. */
  16. typedef struct zv_kernel_s {
  17. /** Pointer to tasks stack. */
  18. zv_task_t *tasks;
  19. /** Size of tasks stack. */
  20. zv_tid_t tasks_count;
  21. } zv_kernel_t;
  22. /**
  23. * @brief That initialize kernel structure.
  24. * @param self Pointer to kernel structure to work on.
  25. * @param tasks Pointer to tasks stack.
  26. * @param count Number of tasks slots on stack.
  27. */
  28. void zv_kernel_init(zv_kernel_t *self, zv_task_t *tasks, zv_tid_t count);
  29. /**
  30. * @brief That boot OS. It return when task stack is empty.
  31. * @return True when everything is executed, and all tasks had been killed.
  32. * False when something went wrong.
  33. */
  34. bool zv_kernel_boot(zv_kernel_t *self);
  35. zv_tid_t zv_kernel_create_process(
  36. zv_kernel_t *self,
  37. zv_worker_t worker,
  38. zv_priority_t priority,
  39. void *param
  40. );
  41. void zv_kernel_kill_process(
  42. zv_kernel_t *self,
  43. zv_tid_t target
  44. );
  45. zv_tid_t __zv_kernel_get_empty_slot(zv_kernel_t *self);
  46. zv_task_t * __zv_kernel_get_task(zv_kernel_t *self, zv_tid_t target);
  47. zv_tid_t __zv_kernel_get_tid(zv_kernel_t *self, zv_task_t *target);
  48. #endif