process.h 966 B

123456789101112131415161718192021222324252627282930313233343536
  1. #ifndef CX_ZIVUOS_PROCESS_H_INCLUDED
  2. #define CX_ZIVUOS_PROCESS_H_INCLUDED
  3. #include <stdint.h>
  4. #include <stdbool.h>
  5. #include "result.h"
  6. #include "models.h"
  7. typedef struct zv_process_s {
  8. zv_state_t state;
  9. zv_priority_t priority;
  10. zv_priority_t balance;
  11. zv_worker_t worker;
  12. zv_universal_t param;
  13. } zv_process_t;
  14. static inline bool zv_process_is_ready(zv_process_t *self) {
  15. return self->state == ZV_READY || self->state == ZV_INTERRUPTED;
  16. }
  17. static inline zv_priority_t _zv_process_calc_priority(zv_process_t *self) {
  18. if (ZV_LOWEST_PRIORITY - self->priority < self->balance) {
  19. return ZV_LOWEST_PRIORITY;
  20. }
  21. return self->priority + self->balance;
  22. }
  23. zv_result_t zv_process_set_param(zv_process_t *, zv_universal_t);
  24. zv_result_t zv_process_set_worker(zv_process_t *, zv_worker_t);
  25. zv_result_t zv_process_set_priority(zv_process_t *, zv_priority_t);
  26. #define ZV_COUNT_PROCESSES(X) ((sizeof(X) / sizeof(zv_process_t)))
  27. #endif