agileRTOS (zrtos)  Version 0.8.0 (ghostbuster)
vheap_task_scheduler.h File Reference
#include <zrtos/types.h>
#include <zrtos/vheap_task.h>
#include <zrtos/vheap.h>
Include dependency graph for vheap_task_scheduler.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  _zrtos_vheap_task_scheduler_t
 

Macros

#define ZRTOS_VHEAP_TASK_SCHEDULER__EACH_TASK_BEGIN(thiz, start_offset, pos, chunk, task)
 
#define ZRTOS_VHEAP_TASK_SCHEDULER__EACH_TASK_END
 

Typedefs

typedef struct _zrtos_vheap_task_scheduler_t zrtos_vheap_task_scheduler_t
 

Functions

zrtos_vheap_tzrtos_vheap_task_scheduler__get_heap (void)
 
void zrtos_vheap_task_scheduler__set_heap (zrtos_vheap_t *heap)
 
zrtos_vheap_task_t_zrtos_vheap_task_scheduler__get_active_task (void)
 
static void _zrtos_vheap_task_scheduler__restore_task (void)
 
static void zrtos_vheap_task_scheduler__page_task_out (void)
 
static void zrtos_vheap_task_scheduler__page_task_in (zrtos_vheap_chunk_t *chunk)
 
static bool _zrtos_vheap_task_scheduler__set_active_task (zrtos_vheap_chunk_uid_t uid)
 
bool zrtos_vheap_task_scheduler__has_enough_stack_space (zrtos_vheap_task_t *task, zrtos_vheap_chunk_t *chunk)
 
bool zrtos_vheap_task_scheduler__start (void)
 
void _zrtos_vheap_task_scheduler__switch_task (void)
 
void _zrtos_vheap_task_scheduler__on_tick (void)
 
void zrtos_vheap_task_scheduler__delay_ms (zrtos_vheap_task_delay_t ms)
 
void zrtos_vheap_task_scheduler__trampoline_cb (zrtos_vheap_task_t *thiz, void *(*callback)(void *args), void *args)
 

Variables

volatile zrtos_vheap_task_scheduler_t zrtos_vheap_task_scheduler = {}
 

Macro Definition Documentation

◆ ZRTOS_VHEAP_TASK_SCHEDULER__EACH_TASK_BEGIN

#define ZRTOS_VHEAP_TASK_SCHEDULER__EACH_TASK_BEGIN (   thiz,
  start_offset,
  pos,
  chunk,
  task 
)
Value:
thiz \
,start_offset \
,pos \
,chunk \
){ \
zrtos_vheap_task_t *task = zrtos_types__ptr_subtract( \
) \
,sizeof(zrtos_vheap_task_t) \
); \
{
#define ZRTOS_VHEAP__EACH_EX_BEGIN(thiz, start_offset, l, type, value)
Definition: vheap.h:397
void * zrtos_types__ptr_subtract(void *ptr, size_t byte_len)
Definition: types.h:39
void * zrtos_vheap_chunk__get_ptr(zrtos_vheap_chunk_t *thiz)
Definition: vheap_chunk.h:28
size_t zrtos_vheap_chunk__get_length(zrtos_vheap_chunk_t *thiz)
Definition: vheap_chunk.h:32
void * zrtos_types__ptr_add(void *ptr, size_t byte_len)
Definition: types.h:35

Definition at line 137 of file vheap_task_scheduler.h.

◆ ZRTOS_VHEAP_TASK_SCHEDULER__EACH_TASK_END

#define ZRTOS_VHEAP_TASK_SCHEDULER__EACH_TASK_END
Value:
} \
#define ZRTOS_VHEAP__EACH_EX_END
Definition: vheap.h:402

Definition at line 154 of file vheap_task_scheduler.h.

Typedef Documentation

◆ zrtos_vheap_task_scheduler_t

Function Documentation

◆ _zrtos_vheap_task_scheduler__get_active_task()

zrtos_vheap_task_t* _zrtos_vheap_task_scheduler__get_active_task ( void  )

Definition at line 38 of file vheap_task_scheduler.h.

38  {
41  ,sizeof(zrtos_vheap_task_t)
42  );
43 }
void * zrtos_types__ptr_subtract(void *ptr, size_t byte_len)
Definition: types.h:39
void * zrtos_vheap__get_last_address(zrtos_vheap_t *thiz)
Definition: vheap.h:52
zrtos_vheap_t * zrtos_vheap_task_scheduler__get_heap(void)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ _zrtos_vheap_task_scheduler__on_tick()

void _zrtos_vheap_task_scheduler__on_tick ( void  )

Definition at line 206 of file vheap_task_scheduler.h.

206  {
208 
210  zrtos_debug__memset(
212  ,0xbb
216  );
217  });
218 
223  )
224  );
225 
227 }
#define ZRTOS_DEBUG__CODE(code)
Definition: debug.h:47
#define ZRTOS_ARCH__SET_STACK_PTR(ptr)
Definition: atmega2560.h:32
#define ZRTOS_ARCH__SAVE_CPU_STATE_EX(ptr)
Definition: atmega2560.h:235
#define ZRTOS_TYPES__GET_STATIC_ARRAY_LENGTH(arr)
Definition: types.h:166
zrtos_arch_stack_t * tmp_stack_ptr
volatile zrtos_vheap_task_scheduler_t zrtos_vheap_task_scheduler
void _zrtos_vheap_task_scheduler__switch_task(void)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ _zrtos_vheap_task_scheduler__restore_task()

static void _zrtos_vheap_task_scheduler__restore_task ( void  )
static

Definition at line 47 of file vheap_task_scheduler.h.

47  {
50 }
#define ZRTOS_ARCH__LOAD_CPU_STATE_EX(ptr)
Definition: atmega2560.h:283
#define ZRTOS_ARCH__RETURN_FROM_INTERRUPT()
Definition: atmega2560.h:293
zrtos_arch_stack_t * tmp_stack_ptr
volatile zrtos_vheap_task_scheduler_t zrtos_vheap_task_scheduler
Here is the caller graph for this function:

◆ _zrtos_vheap_task_scheduler__set_active_task()

static bool _zrtos_vheap_task_scheduler__set_active_task ( zrtos_vheap_chunk_uid_t  uid)
static

Definition at line 84 of file vheap_task_scheduler.h.

88  {
90  zrtos_vheap_chunk_t *chunk;
92  chunk = zrtos_vheap__get_by_id(
93  heap
94  ,uid
95  );
97 
98  return true;
99 }
static void zrtos_vheap_task_scheduler__page_task_in(zrtos_vheap_chunk_t *chunk)
zrtos_vheap_chunk_t * zrtos_vheap__get_by_id(zrtos_vheap_t *thiz, zrtos_vheap_chunk_uid_t uid)
Definition: vheap.h:81
static void zrtos_vheap_task_scheduler__page_task_out(void)
zrtos_vheap_t * zrtos_vheap_task_scheduler__get_heap(void)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ _zrtos_vheap_task_scheduler__switch_task()

void _zrtos_vheap_task_scheduler__switch_task ( void  )

Definition at line 158 of file vheap_task_scheduler.h.

158  {
159  uint8_t tmp = 1;
160  size_t offset = 0;
161  do{
164  ,offset
165  ,pos
166  ,chunk
167  ,task
168  ){
169  if(tmp){
171  }else{
172  if(!zrtos_vheap_task__is_idle(task)
174  task
175  ,chunk
176  )
177  ){
178  /*size_t chunk_count = zrtos_vheap__get_chunk_count(
179  zrtos_vheap_task_scheduler__get_heap()
180  );
181 
182  zrtos_vheap_task_scheduler.start_offset = pos+1;
183  zrtos_vheap_task_scheduler.start_offset = zrtos_vheap_task_scheduler.start_offset < chunk_count
184  ? zrtos_vheap_task_scheduler.start_offset
185  : 0
186  ;*/
187 
189  /*task
191  );
192  goto L_OUT;
193  }
194  }
196 
197  //offset = zrtos_vheap_task_scheduler.start_offset;
198  }while(tmp--);
199 
200 L_OUT:
202 }
#define ZRTOS_VHEAP_TASK_SCHEDULER__EACH_TASK_END
static void _zrtos_vheap_task_scheduler__restore_task(void)
bool zrtos_vheap_task__is_idle(zrtos_vheap_task_t *thiz)
Definition: vheap_task.h:71
bool zrtos_vheap_task_scheduler__has_enough_stack_space(zrtos_vheap_task_t *task, zrtos_vheap_chunk_t *chunk)
zrtos_vheap_chunk_uid_t zrtos_vheap_chunk__get_uid(zrtos_vheap_chunk_t *thiz)
Definition: vheap_chunk.h:36
#define ZRTOS_VHEAP_TASK_SCHEDULER__EACH_TASK_BEGIN(thiz, start_offset, pos, chunk, task)
void zrtos_vheap_task__on_tick(zrtos_vheap_task_t *thiz)
Definition: vheap_task.h:67
static uint8_t
Definition: mcp2515.h:159
static bool _zrtos_vheap_task_scheduler__set_active_task(zrtos_vheap_chunk_uid_t uid)
zrtos_vheap_t * zrtos_vheap_task_scheduler__get_heap(void)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ zrtos_vheap_task_scheduler__delay_ms()

void zrtos_vheap_task_scheduler__delay_ms ( zrtos_vheap_task_delay_t  ms)

Definition at line 230 of file vheap_task_scheduler.h.

230  {
233  ,ms
234  );
236 }
void _zrtos_vheap_task_scheduler__on_tick(void)
void zrtos_vheap_task__set_delay_ms(zrtos_vheap_task_t *thiz, zrtos_vheap_task_tick_type_t ms)
Definition: vheap_task.h:59
zrtos_vheap_task_t * _zrtos_vheap_task_scheduler__get_active_task(void)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ zrtos_vheap_task_scheduler__get_heap()

zrtos_vheap_t* zrtos_vheap_task_scheduler__get_heap ( void  )

Definition at line 30 of file vheap_task_scheduler.h.

30  {
32 }
volatile zrtos_vheap_task_scheduler_t zrtos_vheap_task_scheduler
Here is the caller graph for this function:

◆ zrtos_vheap_task_scheduler__has_enough_stack_space()

bool zrtos_vheap_task_scheduler__has_enough_stack_space ( zrtos_vheap_task_t task,
zrtos_vheap_chunk_t chunk 
)

Definition at line 101 of file vheap_task_scheduler.h.

104  {
106  //@todo stack_size_min
107  //size_t stack_size_min = zrtos_vheap_task__get_stack_size_min(task);
109  mem
111  )
112  <= ZRTOS_TYPES__MAX(
115  ) - zrtos_vheap_chunk__get_length(chunk)){
117  return false;
118  }
119  return true;
120 }
#define ZRTOS_TYPES__MAX(a, b)
Definition: types.h:79
#define ZRTOS_ARCH__FATAL()
Definition: atmega2560.h:30
size_t zrtos_vheap_chunk__get_length(zrtos_vheap_chunk_t *thiz)
Definition: vheap_chunk.h:32
size_t zrtos_vheap_task__get_stack_size_min(zrtos_vheap_task_t *thiz)
Definition: vheap_task.h:94
zrtos_arch_stack_t * tmp_stack_ptr
volatile zrtos_vheap_task_scheduler_t zrtos_vheap_task_scheduler
size_t _zrtos_vheap__get_free_space_ex(zrtos_vheap_t *thiz, void *stack_ptr)
Definition: vheap.h:60
zrtos_vheap_t * zrtos_vheap_task_scheduler__get_heap(void)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ zrtos_vheap_task_scheduler__page_task_in()

static void zrtos_vheap_task_scheduler__page_task_in ( zrtos_vheap_chunk_t chunk)
static

Definition at line 69 of file vheap_task_scheduler.h.

72  {
73  zrtos_vheap_task_t *task;
76  heap
77  ,chunk
78  );
82 }
zrtos_error_t zrtos_vheap_task__get_errno(zrtos_vheap_task_t *thiz)
Definition: vheap_task.h:90
zrtos_arch_stack_t * tmp_stack_ptr
volatile zrtos_vheap_task_scheduler_t zrtos_vheap_task_scheduler
zrtos_arch_stack_t * zrtos_vheap_task__get_stack_ptr(zrtos_vheap_task_t *thiz)
Definition: vheap_task.h:82
zrtos_error_t errno
Definition: errno.h:17
zrtos_vheap_task_t * _zrtos_vheap_task_scheduler__get_active_task(void)
void * zrtos_vheap__page_in(zrtos_vheap_t *thiz, zrtos_vheap_chunk_t *chunk)
Definition: vheap.h:321
zrtos_vheap_t * zrtos_vheap_task_scheduler__get_heap(void)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ zrtos_vheap_task_scheduler__page_task_out()

static void zrtos_vheap_task_scheduler__page_task_out ( void  )
static

Definition at line 53 of file vheap_task_scheduler.h.

53  {
56 
60  heap
65  )
66  );
67 }
void zrtos_vheap_task__set_errno(zrtos_vheap_task_t *thiz, zrtos_error_t errno)
Definition: vheap_task.h:86
void zrtos_vheap_task__set_stack_ptr(zrtos_vheap_task_t *thiz, zrtos_arch_stack_t *stack_ptr)
Definition: vheap_task.h:75
zrtos_vheap_chunk_t * zrtos_vheap__get_by_type_ex(zrtos_vheap_t *thiz, zrtos_vheap_type_t type)
Definition: vheap.h:107
void * zrtos_vheap__get_last_address(zrtos_vheap_t *thiz)
Definition: vheap.h:52
size_t zrtos_types__ptr_get_byte_distance(void *bigger, void *smaller)
Definition: types.h:43
zrtos_arch_stack_t * tmp_stack_ptr
volatile zrtos_vheap_task_scheduler_t zrtos_vheap_task_scheduler
zrtos_error_t errno
Definition: errno.h:17
zrtos_vheap_task_t * _zrtos_vheap_task_scheduler__get_active_task(void)
zrtos_vheap_t * zrtos_vheap_task_scheduler__get_heap(void)
void zrtos_vheap__page_out(zrtos_vheap_t *thiz, zrtos_vheap_chunk_t *chunk, size_t length)
Definition: vheap.h:349
Here is the call graph for this function:
Here is the caller graph for this function:

◆ zrtos_vheap_task_scheduler__set_heap()

void zrtos_vheap_task_scheduler__set_heap ( zrtos_vheap_t heap)

Definition at line 34 of file vheap_task_scheduler.h.

34  {
36 }
volatile zrtos_vheap_task_scheduler_t zrtos_vheap_task_scheduler

◆ zrtos_vheap_task_scheduler__start()

bool zrtos_vheap_task_scheduler__start ( void  )

Definition at line 122 of file vheap_task_scheduler.h.

122  {
125  heap
127  );
128  if(chunk){
131  while(true){}
132  return true;
133  }
134  return false;
135 }
static void _zrtos_vheap_task_scheduler__restore_task(void)
static void zrtos_vheap_task_scheduler__page_task_in(zrtos_vheap_chunk_t *chunk)
zrtos_vheap_chunk_t * zrtos_vheap__get_by_type_ex(zrtos_vheap_t *thiz, zrtos_vheap_type_t type)
Definition: vheap.h:107
zrtos_vheap_t * zrtos_vheap_task_scheduler__get_heap(void)
Here is the call graph for this function:

◆ zrtos_vheap_task_scheduler__trampoline_cb()

void zrtos_vheap_task_scheduler__trampoline_cb ( zrtos_vheap_task_t thiz,
void *(*)(void *args)  callback,
void *  args 
)

Definition at line 238 of file vheap_task_scheduler.h.

242  {
243  void *ret = callback(args);
247  );
250 
252 
253  __builtin_unreachable();
254  while(1){
255  //should not return
256  }
257 }
void _zrtos_vheap_task_scheduler__on_tick(void)
void zrtos_vheap_task__set_return_value(zrtos_vheap_task_t *thiz, void *return_value)
Definition: vheap_task.h:98
zrtos_vheap_chunk_t * zrtos_vheap__get_by_type_ex(zrtos_vheap_t *thiz, zrtos_vheap_type_t type)
Definition: vheap.h:107
void zrtos_vheap_chunk__set_type(zrtos_vheap_chunk_t *thiz, zrtos_vheap_type_t type)
Definition: vheap_chunk.h:46
zrtos_vheap_t * zrtos_vheap_task_scheduler__get_heap(void)
Here is the call graph for this function:

Variable Documentation

◆ zrtos_vheap_task_scheduler

volatile zrtos_vheap_task_scheduler_t zrtos_vheap_task_scheduler = {}

Definition at line 27 of file vheap_task_scheduler.h.