agileRTOS (zrtos)  Version 0.8.0 (ghostbuster)
vheap_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_VHEAP_TASK_H
8 #define ZRTOS_VHEAP_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/vheap_chunk_uid.h>
22 
23 
24 typedef uint16_t zrtos_vheap_task_delay_t;
25 typedef unsigned int zrtos_vheap_task_tick_type_t;
26 typedef unsigned int zrtos_vheap_task_id_t;
27 
28 
29 typedef struct _zrtos_vheap_task_t{
31  void *return_value;
32  size_t stacksize_min;
33  uint16_t ticks;
36 
38  zrtos_vheap_task_t *thiz
39  ,zrtos_arch_stack_t *heap
40  //,size_t heap_size
41  ,size_t stacksize_min
42  ,zrtos_arch_callback_t callback
43  ,void *args
44 ){
46  heap
47  //,heap_size
48  ,callback
49  ,args
50  );
51  thiz->return_value = 0;
53  thiz->ticks = 0;
54  thiz->errno = 0;
55 
56  return true;
57 }
58 
59 void zrtos_vheap_task__set_delay_ms(zrtos_vheap_task_t *thiz,zrtos_vheap_task_tick_type_t ms){
60 #if ZRTOS_BOARD__TICK_PERIOD_MS == 1
61  thiz->ticks = ms;
62 #else
63  thiz->ticks = ms ? (ms / ZRTOS_BOARD__TICK_PERIOD_MS) : 0;
64 #endif
65 }
66 
68  thiz->ticks -= (thiz->ticks > 0);
69 }
70 
72  return thiz->ticks > 0;
73 }
74 
76  zrtos_vheap_task_t *thiz
78 ){
79  thiz->stack_ptr = stack_ptr;
80 }
81 
83  return thiz->stack_ptr;
84 }
85 
87  thiz->errno = errno;
88 }
89 
91  return thiz->errno;
92 }
93 
95  return thiz->stacksize_min;
96 }
97 
99  thiz->return_value = return_value;
100 }
101 
103  return thiz->return_value;
104 }
105 
106 #ifdef __cplusplus
107 }
108 #endif
109 #endif
uint8_t zrtos_arch_stack_t
Definition: atmega2560.h:19
void zrtos_vheap_task__set_errno(zrtos_vheap_task_t *thiz, zrtos_error_t errno)
Definition: vheap_task.h:86
bool zrtos_vheap_task__is_idle(zrtos_vheap_task_t *thiz)
Definition: vheap_task.h:71
void zrtos_vheap_task__set_return_value(zrtos_vheap_task_t *thiz, void *return_value)
Definition: vheap_task.h:98
unsigned int zrtos_vheap_task_tick_type_t
Definition: vheap_task.h:25
void zrtos_vheap_task__set_delay_ms(zrtos_vheap_task_t *thiz, zrtos_vheap_task_tick_type_t ms)
Definition: vheap_task.h:59
#define ZRTOS_BOARD__TICK_PERIOD_MS
Definition: ansi_c.h:18
void zrtos_vheap_task__set_stack_ptr(zrtos_vheap_task_t *thiz, zrtos_arch_stack_t *stack_ptr)
Definition: vheap_task.h:75
unsigned int zrtos_vheap_task_id_t
Definition: vheap_task.h:26
zrtos_error_t errno
Definition: vheap_task.h:34
void(* zrtos_arch_callback_t)(void *arg)
Definition: arch.h:17
void * zrtos_vheap_task__get_return_value(zrtos_vheap_task_t *thiz)
Definition: vheap_task.h:102
size_t zrtos_vheap_task__get_stack_size_min(zrtos_vheap_task_t *thiz)
Definition: vheap_task.h:94
void zrtos_vheap_task__on_tick(zrtos_vheap_task_t *thiz)
Definition: vheap_task.h:67
zrtos_arch_stack_t * stack_ptr
Definition: vheap_task.h:30
zrtos_error_t zrtos_vheap_task__get_errno(zrtos_vheap_task_t *thiz)
Definition: vheap_task.h:90
struct _zrtos_vheap_task_t zrtos_vheap_task_t
#define zrtos_arch__cpu_state_init
Definition: atmega2560.h:187
zrtos_arch_stack_t * zrtos_vheap_task__get_stack_ptr(zrtos_vheap_task_t *thiz)
Definition: vheap_task.h:82
zrtos_error_t
Definition: error.h:20
bool zrtos_vheap_task__init(zrtos_vheap_task_t *thiz, zrtos_arch_stack_t *heap, size_t stacksize_min, zrtos_arch_callback_t callback, void *args)
Definition: vheap_task.h:37
uint16_t zrtos_vheap_task_delay_t
Definition: vheap_task.h:24