Files
RTOS/Kernel/SingleCore/os_task.h
T
2026-05-27 23:30:31 +08:00

97 lines
2.4 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*/
#ifndef INCLUDED_OS_ALIGN_H
#include <os_align.h>
#endif /*INCLUDED_OS_ALIGN_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;
}
/* ------------------------------------------------------------------------------------------------------------------ */
/* */
#define OS_TASK_DEF(Name, StackSize) \
OS_ALIGNED(OS_ALIGN_SIZE) \
static uint8_t Name##_Stack[StackSize]; \
static os_task_t Name; \
OS_NORETURN \
static void Name##_TaskEntry(void* param)
#define OS_TASK_RUN(Name, Param, Ticks, Priority) \
os_task_init(&Name, Name##_TaskEntry, Param, Name##_Stack, OS_ARRAY_SIZE(Name##_Stack), Ticks, Priority)
#endif /*INCLUDED_OS_TASK_H*/