process.h 884 B

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