82 lines
1.8 KiB
C
82 lines
1.8 KiB
C
#ifndef INCLUDED_OS_TASK_H
|
|||
|
|
#define INCLUDED_OS_TASK_H
|
||
|
|
|
||
|
|
#ifndef INCLUDED_OS_TYPES_H
|
||
|
|
#include <os_types.h>
|
||
|
|
#endif /*INCLUDED_OS_TYPES_H*/
|
||
|
|
|
||
|
|
#ifndef INCLUDED_OS_STACK_H
|
||
|
|
#include <os_stack.h>
|
||
|
|
#endif /*INCLUDED_OS_STACK_H*/
|
||
|
|
|
||
|
|
#ifndef INCLUDED_OS_LIST_H
|
||
|
|
#include <os_list.h>
|
||
|
|
#endif /*INCLUDED_OS_LIST_H*/
|
||
|
|
|
||
|
|
#ifndef INCLUDED_OS_PRIORITY_H
|
||
|
|
#include <os_priority.h>
|
||
|
|
#endif /*INCLUDED_OS_PRIORITY_H*/
|
||
|
|
|
||
|
|
#ifndef INCLUDED_OS_UTILS_H
|
||
|
|
#include <os_utils.h>
|
||
|
|
#endif /*INCLUDED_OS_UTILS_H*/
|
||
|
|
|
||
|
|
#ifndef INCLUDED_OS_TIMER_H
|
||
|
|
#include <os_timer.h>
|
||
|
|
#endif /*INCLUDED_OS_TIMER_H*/
|
||
|
|
|
||
|
|
#ifndef INCLUDED_OS_SCHED_H
|
||
|
|
#include <os_sched.h>
|
||
|
|
#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*/
|