agileRTOS (zrtos)  Version 0.8.0 (ghostbuster)
task.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2024 ykat UG (haftungsbeschraenkt) - All Rights Reserved
3  *
4  * Permission for non-commercial use is hereby granted,
5  * free of charge, without warranty of any kind.
6  */
7 #ifndef ZRTOS_TASK_H
8 #define ZRTOS_TASK_H
9 #ifdef __cplusplus
10 extern "C" {
11 #endif
12 
13 
14 #ifndef ZRTOS_BOARD__TICK_PERIOD_MS
15 #error "Please define ZRTOS_BOARD__TICK_PERIOD_MS"
16 #endif
17 
18 
19 #include <zrtos/error.h>
20 #include <zrtos/errno.h>
21 #include <zrtos/clist.h>
22 
23 
24 typedef unsigned int zrtos_task_tick_t;
25 typedef unsigned int zrtos_task_id_t;
26 
27 typedef enum{
29  ,ZRTOS_TASK_STATE__RUNNING = 1 << (sizeof(zrtos_task_tick_t) * 8 - 2)
30  ,ZRTOS_TASK_STATE__DONE = 1 << (sizeof(zrtos_task_tick_t) * 8 - 1)
34 
35 
36 typedef struct _zrtos_task_t{
40  zrtos_task_tick_t ticks;
43 
45  zrtos_task_t *thiz
47 ){
48  if(zrtos_clist_node__init(&thiz->node)){
49  thiz->parent = 0;
50  thiz->stack_ptr = stack_ptr;
51  thiz->ticks = 0;
52  thiz->error_code = 0;
53  return true;
54  }
55  return false;
56 }
57 
59  zrtos_task_t *thiz
60  ,zrtos_arch_stack_t *heap
61  ,zrtos_arch_callback_t callback
62  ,void *args
63 ){
64  return zrtos_task__init(
65  thiz
67  heap
68  //,heap_size
69  ,callback
70  ,args
71  )
72  );
73 }
74 
75 void zrtos_task__set_delay_ms(zrtos_task_t *thiz,zrtos_task_tick_t ms){
76 #if ZRTOS_BOARD__TICK_PERIOD_MS == 1
77  thiz->ticks = ms;
78 #else
79  thiz->ticks = ms ? (ms / ZRTOS_BOARD__TICK_PERIOD_MS) : 0;
80 #endif
81 }
82 
84  zrtos_task_tick_t val = thiz->ticks;
85  if(0 == (val & ZRTOS_TASK_STATE__MASK)){
86  thiz->ticks -= (val > 0);
87  }
88 }
89 
91  return thiz->ticks == 0;
92 }
93 
95  return (thiz->ticks & ZRTOS_TASK_STATE__RUNNING) > 0;
96 }
97 
99  return (thiz->ticks & ZRTOS_TASK_STATE__DONE) > 0;
100 }
101 
103  thiz->ticks ^= (thiz->ticks & ZRTOS_TASK_STATE__MASK);
104 }
105 
108 }
109 
111  thiz->ticks |= ZRTOS_TASK_STATE__DONE;
112 }
113 
117 }
118 
122 }
123 
125  thiz->stack_ptr = stack_ptr;
126 }
127 
129  return thiz->stack_ptr;
130 }
131 
133  thiz->error_code = error_code;
134 }
135 
137  return thiz->error_code;
138 }
139 
141  thiz->parent = parent;
142 }
143 
145  return thiz->parent;
146 }
147 
148 
149 #ifdef __cplusplus
150 }
151 #endif
152 #endif
void zrtos_task__set_parent(zrtos_task_t *thiz, zrtos_task_t *parent)
Definition: task.h:140
void zrtos_task__set_stack_ptr(zrtos_task_t *thiz, zrtos_arch_stack_t *stack_ptr)
Definition: task.h:124
zrtos_error_t error_code
Definition: task.h:41
uint8_t zrtos_arch_stack_t
Definition: atmega2560.h:19
bool zrtos_task__init(zrtos_task_t *thiz, zrtos_arch_stack_t *stack_ptr)
Definition: task.h:44
void zrtos_task__on_tick(zrtos_task_t *thiz)
Definition: task.h:83
unsigned int zrtos_task_id_t
Definition: task.h:25
unsigned int zrtos_task_tick_t
Definition: task.h:24
struct _zrtos_task_t * parent
Definition: task.h:38
zrtos_task_state_t
Definition: task.h:27
zrtos_arch_stack_t * zrtos_task__get_stack_ptr(zrtos_task_t *thiz)
Definition: task.h:128
#define ZRTOS_BOARD__TICK_PERIOD_MS
Definition: ansi_c.h:18
#define zrtos_types__get_container_of(ptr, type, member)
Definition: types.h:69
zrtos_clist_node_t node
Definition: task.h:37
void zrtos_task__set_running(zrtos_task_t *thiz)
Definition: task.h:106
bool zrtos_task__init_ex(zrtos_task_t *thiz, zrtos_arch_stack_t *heap, zrtos_arch_callback_t callback, void *args)
Definition: task.h:58
zrtos_task_t * zrtos_task__get_next_task(zrtos_task_t *thiz)
Definition: task.h:114
bool zrtos_task__is_done(zrtos_task_t *thiz)
Definition: task.h:98
zrtos_task_t * zrtos_task__get_previous_task(zrtos_task_t *thiz)
Definition: task.h:119
void zrtos_task__set_delay_ms(zrtos_task_t *thiz, zrtos_task_tick_t ms)
Definition: task.h:75
void(* zrtos_arch_callback_t)(void *arg)
Definition: arch.h:17
zrtos_task_t * zrtos_task__get_parent(zrtos_task_t *thiz)
Definition: task.h:144
bool zrtos_task__is_ready(zrtos_task_t *thiz)
Definition: task.h:90
zrtos_arch_stack_t * stack_ptr
Definition: task.h:39
bool zrtos_task__is_running(zrtos_task_t *thiz)
Definition: task.h:94
void zrtos_task__set_done(zrtos_task_t *thiz)
Definition: task.h:110
void zrtos_task__set_ready(zrtos_task_t *thiz)
Definition: task.h:102
struct _zrtos_task_t zrtos_task_t
#define zrtos_arch__cpu_state_init
Definition: atmega2560.h:187
zrtos_clist_node_t * zrtos_clist_node__get_next_node(zrtos_clist_node_t *node)
Definition: clist.h:38
zrtos_error_t zrtos_task__get_errno(zrtos_task_t *thiz)
Definition: task.h:136
bool zrtos_clist_node__init(zrtos_clist_node_t *thiz)
Definition: clist.h:33
zrtos_task_tick_t ticks
Definition: task.h:40
zrtos_error_t
Definition: error.h:20
void zrtos_task__set_errno(zrtos_task_t *thiz, zrtos_error_t error_code)
Definition: task.h:132
zrtos_clist_node_t * zrtos_clist_node__get_previous_node(zrtos_clist_node_t *node)
Definition: clist.h:50