os_task.h 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #pragma once
  2. #include "bsp/bsp.h"
  3. #include "os/os_types.h"
  4. #include "bsp/delay.h"
  5. #define MAX_TASK 32
  6. #define TIMER_INIT(timer, handler) {&timer, &timer, handler}
  7. typedef uint32_t (*TskFunction_t)( void * );
  8. typedef struct shark_task {
  9. u64 time;
  10. struct shark_task *next;
  11. TskFunction_t handler;
  12. void *params;
  13. } shark_task_t;
  14. typedef struct shark_timer {
  15. struct shark_timer *prev;
  16. struct shark_timer *next;
  17. void (*handler)(struct shark_timer *timer);
  18. u64 time;
  19. } shark_timer_t;
  20. static inline bool shark_timer_started(shark_timer_t *timer)
  21. {
  22. return timer->next != timer;
  23. }
  24. static inline bool shark_timer_stopped(shark_timer_t *timer)
  25. {
  26. return timer->next == timer;
  27. }
  28. static inline uint32_t cpu_enter_critical() {
  29. uint32_t primask = __get_PRIMASK();
  30. __disable_irq();
  31. return primask;
  32. }
  33. static inline void cpu_exit_critical(uint32_t priority_mask) {
  34. __set_PRIMASK(priority_mask);
  35. }
  36. u32 get_tick_ms(void);
  37. u32 get_delta_ms(uint32_t prev_ms);
  38. u64 shark_get_mseconds(void);
  39. u32 shark_get_seconds(void);
  40. void shark_timer_post(shark_timer_t *timer, u32 delay);
  41. void shark_timer_cancel(shark_timer_t *timer);
  42. void shark_task_add(shark_task_t *task);
  43. void shark_task_run(void);
  44. shark_task_t *shark_task_create(TskFunction_t, void *);