7 #ifndef ZRTOS_TASK_SCHEDULER_H 8 #define ZRTOS_TASK_SCHEDULER_H 32 #define ZRTOS_TASK_SCHEDULER__DO_NOT_DISTURB(code) \ 34 ZRTOS_ARCH__DISABLE_INTERRUPTS(); \ 35 zrtos_task_scheduler.do_not_disturb++; \ 36 ZRTOS_ARCH__ENABLE_INTERRUPTS(); \ 40 ZRTOS_ARCH__DISABLE_INTERRUPTS(); \ 41 zrtos_task_scheduler.do_not_disturb--; \ 42 ZRTOS_ARCH__ENABLE_INTERRUPTS(); \ 46 #define ZRTOS_TASK_SCHEDULER__DO_NOT_DISTURB_EX(is_locked,code) \ 48 ZRTOS_ARCH__DISABLE_INTERRUPTS(); \ 49 is_locked = (zrtos_task_scheduler.do_not_disturb == 0); \ 50 zrtos_task_scheduler.do_not_disturb++; \ 51 ZRTOS_ARCH__ENABLE_INTERRUPTS(); \ 55 ZRTOS_ARCH__DISABLE_INTERRUPTS(); \ 56 zrtos_task_scheduler.do_not_disturb--; \ 57 ZRTOS_ARCH__ENABLE_INTERRUPTS(); \ 63 &zrtos_task_scheduler.
root 99 }
while(node != sentinel);
139 }
while(task != active_task);
147 }
while(task != active_task);
156 #pragma GCC push_options 157 #pragma GCC optimize ("O0") 166 #pragma GCC pop_options 200 &zrtos_task_scheduler.
root 209 #define ZRTOS_TASK_SCHEDULER__EACH_TASK(node) \ 210 for(zrtos_task_t *node = _zrtos_task_scheduler__get_active_task() \ 214 next = zrtos_task__get_next_task(node); \ #define ZRTOS_TASK_SCHEDULER__DO_NOT_DISTURB(code)
void zrtos_task__set_parent(zrtos_task_t *thiz, zrtos_task_t *parent)
void zrtos_task__set_stack_ptr(zrtos_task_t *thiz, zrtos_arch_stack_t *stack_ptr)
void zrtos_task_scheduler__init()
uint8_t zrtos_arch_stack_t
bool zrtos_task__init(zrtos_task_t *thiz, zrtos_arch_stack_t *stack_ptr)
bool zrtos_clist__init(zrtos_clist_t *thiz)
void zrtos_task__on_tick(zrtos_task_t *thiz)
unsigned int zrtos_task_tick_t
bool zrtos_clist__delete(zrtos_clist_t *thiz, zrtos_clist_node_t *node)
bool zrtos_task_scheduler__remove_task(zrtos_task_t *task)
void zrtos_task_scheduler__start(void)
#define ZRTOS_ARCH__LOAD_CPU_STATE_EX(ptr)
zrtos_arch_stack_t * zrtos_task__get_stack_ptr(zrtos_task_t *thiz)
static void zrtos_task_scheduler__page_task_in(zrtos_task_t *task)
struct _zrtos_task_scheduler_t zrtos_task_scheduler_t
zrtos_clist_node_t * zrtos_clist__get_root(zrtos_clist_t *thiz)
#define ZRTOS_TASK_SCHEDULER__EACH_TASK(node)
#define ZRTOS_ARCH__RETURN_FROM_INTERRUPT()
static bool _zrtos_task_scheduler__set_active_task(zrtos_task_t *task)
bool zrtos_task_scheduler__add_task(zrtos_task_t *task)
#define zrtos_types__get_container_of(ptr, type, member)
#define ZRTOS_ARCH__SAVE_CPU_STATE_EX(ptr)
static void zrtos_task_scheduler__page_task_out(void)
zrtos_task_scheduler_t zrtos_task_scheduler
zrtos_task_t * zrtos_task__get_next_task(zrtos_task_t *thiz)
static zrtos_task_t * zrtos_task_scheduler__get_any_child(zrtos_task_t *task)
void zrtos_task__set_delay_ms(zrtos_task_t *thiz, zrtos_task_tick_t ms)
static bool _zrtos_task_scheduler__switch_task(void)
zrtos_arch_stack_t * tmp_stack_ptr
zrtos_task_t * zrtos_task__get_parent(zrtos_task_t *thiz)
bool zrtos_task__is_ready(zrtos_task_t *thiz)
void _zrtos_task_scheduler__on_tick(void)
void zrtos_task_scheduler__stop(void)
zrtos_task_t * _zrtos_task_scheduler__get_active_task(void)
bool zrtos_task_scheduler__has_task(zrtos_task_t *task)
bool zrtos_clist__push(zrtos_clist_t *thiz, zrtos_clist_node_t *node)
void zrtos_task_scheduler__delay_ms(zrtos_task_tick_t ms)
zrtos_error_t zrtos_task__get_errno(zrtos_task_t *thiz)
void zrtos_task__set_errno(zrtos_task_t *thiz, zrtos_error_t error_code)
void zrtos_clist__set_root(zrtos_clist_t *thiz, zrtos_clist_node_t *node)
static zrtos_task_t * _zrtos_task_scheduler__get_sleep_task(void)
static void _zrtos_task_scheduler__on_tick_ex(void)