#ifndef INCLUDED_OS_TASK_H #define INCLUDED_OS_TASK_H #ifndef INCLUDED_OS_TYPES_H #include #endif /*INCLUDED_OS_TYPES_H*/ #ifndef INCLUDED_OS_STACK_H #include #endif /*INCLUDED_OS_STACK_H*/ #ifndef INCLUDED_OS_LIST_H #include #endif /*INCLUDED_OS_LIST_H*/ #ifndef INCLUDED_OS_PRIORITY_H #include #endif /*INCLUDED_OS_PRIORITY_H*/ #ifndef INCLUDED_OS_UTILS_H #include #endif /*INCLUDED_OS_UTILS_H*/ #ifndef INCLUDED_OS_TIMER_H #include #endif /*INCLUDED_OS_TIMER_H*/ #ifndef INCLUDED_OS_SCHED_H #include #endif /*INCLUDED_OS_SCHED_H*/ /* ------------------------------------------------------------------------------------------------------------------ */ /* */ typedef void (*os_task_entry_t)(void*); typedef enum { kOsTaskState_Terminated = -1, kOsTaskState_Idle = 0, kOsTaskState_Ready = 1, kOsTaskState_Running = 2, kOsTaskState_Yield = 3, kOsTaskState_Delay = 4, kOsTaskState_Wait = 5, }os_task_state_t; typedef struct os_task_t{ os_stack_t stack; os_list_node_t node; os_tick_t init_ticks; os_tick_t remain_ticks; os_priority_t init_priority; os_priority_t curr_priority; os_timer_t timer; os_task_state_t state; os_err_t errors; }os_task_t; void os_task_init(os_task_t* self, os_task_entry_t entry, void* param, void* stack_base, os_size_t stack_size, os_tick_t ticks, os_priority_t priority); void os_task_sleep(os_tick_t ticks); void os_task_yield(void); void os_task_join(os_task_t* self); OS_STATIC_FORCE_INLINE void os_tick_sleep_ms(os_size_t ms){ os_task_sleep(os_tick_from_ms(ms)); } OS_STATIC_FORCE_INLINE os_task_t* os_task_self(void){ return (os_task_t*)g_os_sched_current_task_p; } #endif /*INCLUDED_OS_TASK_H*/