2026-05-19 11:49:22 +08:00
|
|
|
#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*/
|
|
|
|
|
|
2026-05-27 23:30:31 +08:00
|
|
|
#ifndef INCLUDED_OS_ALIGN_H
|
|
|
|
|
#include <os_align.h>
|
|
|
|
|
#endif /*INCLUDED_OS_ALIGN_H*/
|
2026-05-19 11:49:22 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
/* ------------------------------------------------------------------------------------------------------------------ */
|
|
|
|
|
/* */
|
|
|
|
|
|
|
|
|
|
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
|
2026-05-29 13:19:19 +08:00
|
|
|
void os_task_sleep_ms(os_size_t ms){
|
2026-05-19 11:49:22 +08:00
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
|
2026-05-27 23:30:31 +08:00
|
|
|
/* ------------------------------------------------------------------------------------------------------------------ */
|
|
|
|
|
/* */
|
|
|
|
|
|
|
|
|
|
#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)
|
2026-05-19 11:49:22 +08:00
|
|
|
|
2026-05-28 18:33:59 +08:00
|
|
|
#define OS_TASK_FAST_DEF(Name) OS_TASK_DEF(Name, 1024)
|
|
|
|
|
#define OS_TASK_FAST_RUN(Name) OS_TASK_RUN(Name, 0, 10, OS_PRIORITY_NORMAL)
|
2026-05-19 11:49:22 +08:00
|
|
|
|
|
|
|
|
#endif /*INCLUDED_OS_TASK_H*/
|