agileRTOS (zrtos)  Version 0.8.0 (ghostbuster)
vheap_task_pthread.h File Reference
#include <zrtos/error.h>
#include <zrtos/vheap.h>
#include <zrtos/vheap_task_scheduler.h>
#include <zrtos/task_mutex.h>
#include <zrtos/types.h>
Include dependency graph for vheap_task_pthread.h:

Go to the source code of this file.

Data Structures

struct  pthread_attr_t
 
struct  pthread_t
 
struct  pthread_mutexattr_t
 
struct  pthread_mutex_t
 

Macros

#define PTHREAD_MUTEX_INITIALIZER
 

Functions

int pthread_attr_init (pthread_attr_t *attr)
 
int pthread_attr_destroy (pthread_attr_t *attr)
 
int pthread_attr_setstacksize (pthread_attr_t *attr, size_t stacksize)
 
int pthread_mutexattr_init (pthread_mutexattr_t *attr)
 
int pthread_mutexattr_destroy (pthread_mutexattr_t *attr)
 
int pthread_mutex_init (pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrict attr)
 
int pthread_mutex_destroy (pthread_mutex_t *mutex)
 
pthread_t pthread_self (void)
 
int pthread_create (pthread_t *restrict thread, const pthread_attr_t *restrict attr, void *(*start_routine)(void *), void *restrict arg)
 
int pthread_equal (pthread_t t1, pthread_t t2)
 
int pthread_join (pthread_t thread, void **retval)
 
int pthread_mutex_lock (pthread_mutex_t *mutex)
 
int pthread_mutex_trylock (pthread_mutex_t *mutex)
 
int pthread_mutex_unlock (pthread_mutex_t *mutex)
 

Macro Definition Documentation

◆ PTHREAD_MUTEX_INITIALIZER

#define PTHREAD_MUTEX_INITIALIZER
Value:
{ \
.mutex = ZRTOS_TASK_MUTEX__INIT() \
}

Definition at line 36 of file vheap_task_pthread.h.

Function Documentation

◆ pthread_attr_destroy()

int pthread_attr_destroy ( pthread_attr_t attr)

Definition at line 48 of file vheap_task_pthread.h.

48  {
49  return 0;
50 }

◆ pthread_attr_init()

int pthread_attr_init ( pthread_attr_t attr)

Definition at line 41 of file vheap_task_pthread.h.

41  {
44  ;
45  return 0;
46 }
#define ZRTOS_ARCH__GET_CPU_STATE_BUFFER_LENGTH()
Definition: atmega2560.h:192
size_t stacksize
Definition: task_pthread.h:22
#define ZRTOS_ARCH__GET_FN_CALL_STACK_LENGTH()
Definition: atmega2560.h:193

◆ pthread_attr_setstacksize()

int pthread_attr_setstacksize ( pthread_attr_t attr,
size_t  stacksize 
)

Definition at line 52 of file vheap_task_pthread.h.

52  {
53  attr->stacksize = stacksize;
54  return 0;
55 }
size_t stacksize
Definition: task_pthread.h:22

◆ pthread_create()

int pthread_create ( pthread_t *restrict  thread,
const pthread_attr_t *restrict  attr,
void *(*)(void *)  start_routine,
void *restrict  arg 
)

Definition at line 90 of file vheap_task_pthread.h.

95  {
96  size_t stack_size_min = ZRTOS_ARCH__GET_CPU_STATE_BUFFER_LENGTH()
98  ;
100  size_t stacksize_min = sizeof(zrtos_vheap_task_t) + (
101  attr
103  stack_size_min
104  ,attr->stacksize
105  )
106  : stack_size_min
107  );
109  mem
110  ,pthread_self().id
112  ,stacksize_min
113  );
114  int ret = ZRTOS_ERROR__NOMEM;
115 
116  if(chunk){
117  void *mem_chunk_last_address = zrtos_vheap_chunk__get_last_address(
118  chunk
119  );
121  mem_chunk_last_address
122  ,sizeof(zrtos_vheap_task_t)
123  );
125  task
126  ,(zrtos_arch_stack_t*)(task - 1)
127  ,stacksize_min
128  ,start_routine
129  ,arg
130  );
134  mem_chunk_last_address
135  ,task->stack_ptr
136  )
137  );
138  ret = 0;
139  }
140 
141  return ret;
142 }
uint8_t zrtos_arch_stack_t
Definition: atmega2560.h:19
void * zrtos_types__ptr_subtract(void *ptr, size_t byte_len)
Definition: types.h:39
#define ZRTOS_TYPES__MAX(a, b)
Definition: types.h:79
#define ZRTOS_ARCH__GET_CPU_STATE_BUFFER_LENGTH()
Definition: atmega2560.h:192
zrtos_vheap_chunk_t * _zrtos_vheap__malloc(zrtos_vheap_t *thiz, zrtos_vheap_chunk_uid_t parent, zrtos_vheap_type_t type, size_t length)
Definition: vheap.h:145
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 * stack_ptr
Definition: vheap_task.h:30
Out of memory.
Definition: error.h:36
size_t stacksize
Definition: task_pthread.h:22
struct _zrtos_vheap_task_t zrtos_vheap_task_t
pthread_t pthread_self(void)
void * zrtos_vheap_chunk__get_last_address(zrtos_vheap_chunk_t *thiz)
Definition: vheap_chunk.h:53
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
zrtos_vheap_t * zrtos_vheap_task_scheduler__get_heap(void)
#define ZRTOS_ARCH__GET_FN_CALL_STACK_LENGTH()
Definition: atmega2560.h:193
Here is the call graph for this function:

◆ pthread_equal()

int pthread_equal ( pthread_t  t1,
pthread_t  t2 
)

Definition at line 144 of file vheap_task_pthread.h.

144  {
145  return zrtos_vheap_chunk_uid__cmp(&t1.id,&t2.id);
146 }
zrtos_vheap_chunk_uid_t id
int zrtos_vheap_chunk_uid__cmp(zrtos_vheap_chunk_uid_t *a, zrtos_vheap_chunk_uid_t *b)
Here is the call graph for this function:

◆ pthread_join()

int pthread_join ( pthread_t  thread,
void **  retval 
)

Definition at line 148 of file vheap_task_pthread.h.

148  {
149  int ret = ESRCH;
150 
151  do{
154  ,thread.id
155  );
156  if(chunk){
157  zrtos_vheap_task_t *task;
158 
160  chunk
162  )){
164  continue;
165  }
166 
169  chunk
170  )
171  ,sizeof(zrtos_vheap_task_t)
172  );
173  *retval = zrtos_vheap_task__get_return_value(task);
176  ,chunk
177  );
178  ret = 0;
179  }
180  break;
181  }while(1);
182 
183  return ret;
184 }
void * zrtos_types__ptr_subtract(void *ptr, size_t byte_len)
Definition: types.h:39
void _zrtos_vheap__free(zrtos_vheap_t *thiz, zrtos_vheap_chunk_t *chunk)
Definition: vheap.h:275
zrtos_vheap_chunk_uid_t id
zrtos_vheap_chunk_t * zrtos_vheap__get_by_id(zrtos_vheap_t *thiz, zrtos_vheap_chunk_uid_t uid)
Definition: vheap.h:81
void * zrtos_vheap_task__get_return_value(zrtos_vheap_task_t *thiz)
Definition: vheap_task.h:102
bool zrtos_vheap_chunk__is_type_eq(zrtos_vheap_chunk_t *thiz, zrtos_vheap_type_t type)
Definition: vheap_chunk.h:60
void * zrtos_vheap_chunk__get_last_address(zrtos_vheap_chunk_t *thiz)
Definition: vheap_chunk.h:53
void zrtos_vheap_task_scheduler__delay_ms(zrtos_vheap_task_delay_t ms)
zrtos_vheap_t * zrtos_vheap_task_scheduler__get_heap(void)
Here is the call graph for this function:

◆ pthread_mutex_destroy()

int pthread_mutex_destroy ( pthread_mutex_t mutex)

Definition at line 72 of file vheap_task_pthread.h.

72  {
74  return 0;
75 }
zrtos_task_mutex_t mutex
Definition: task_pthread.h:33
void zrtos_task_mutex__deinit(zrtos_task_mutex_t *thiz)
Definition: task_mutex.h:29
Here is the call graph for this function:

◆ pthread_mutex_init()

int pthread_mutex_init ( pthread_mutex_t *restrict  mutex,
const pthread_mutexattr_t *restrict  attr 
)

Definition at line 65 of file vheap_task_pthread.h.

68  {
69  return zrtos_task_mutex__init(&mutex->mutex) ? 0 : ZRTOS_ERROR__INVAL;
70 }
zrtos_task_mutex_t mutex
Definition: task_pthread.h:33
bool zrtos_task_mutex__init(zrtos_task_mutex_t *thiz)
Definition: task_mutex.h:24
Invalid argument.
Definition: error.h:46
Here is the call graph for this function:

◆ pthread_mutex_lock()

int pthread_mutex_lock ( pthread_mutex_t mutex)

Definition at line 186 of file vheap_task_pthread.h.

186  {
187  return zrtos_task_mutex__lock(&mutex->mutex);
188 }
zrtos_task_mutex_t mutex
Definition: task_pthread.h:33
int zrtos_task_mutex__lock(zrtos_task_mutex_t *thiz)
Definition: task_mutex.h:44
Here is the call graph for this function:

◆ pthread_mutex_trylock()

int pthread_mutex_trylock ( pthread_mutex_t mutex)

Definition at line 190 of file vheap_task_pthread.h.

190  {
191  return zrtos_task_mutex__try_lock(&mutex->mutex);
192 }
zrtos_task_mutex_t mutex
Definition: task_pthread.h:33
int zrtos_task_mutex__try_lock(zrtos_task_mutex_t *thiz)
Definition: task_mutex.h:33
Here is the call graph for this function:

◆ pthread_mutex_unlock()

int pthread_mutex_unlock ( pthread_mutex_t mutex)

Definition at line 194 of file vheap_task_pthread.h.

194  {
195  return zrtos_task_mutex__unlock(&mutex->mutex);
196 }
zrtos_task_mutex_t mutex
Definition: task_pthread.h:33
int zrtos_task_mutex__unlock(zrtos_task_mutex_t *thiz)
Definition: task_mutex.h:62
Here is the call graph for this function:

◆ pthread_mutexattr_destroy()

int pthread_mutexattr_destroy ( pthread_mutexattr_t attr)

Definition at line 61 of file vheap_task_pthread.h.

61  {
62  return 0;
63 }

◆ pthread_mutexattr_init()

int pthread_mutexattr_init ( pthread_mutexattr_t attr)

Definition at line 57 of file vheap_task_pthread.h.

57  {
58  return 0;
59 }

◆ pthread_self()

pthread_t pthread_self ( void  )

Definition at line 77 of file vheap_task_pthread.h.

77  {
81  );
82  pthread_t ret;
83  ret.id = chunk
86  ;
87  return ret;
88 }
zrtos_vheap_chunk_uid_t id
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_chunk_uid_t zrtos_vheap_chunk__get_uid(zrtos_vheap_chunk_t *thiz)
Definition: vheap_chunk.h:36
zrtos_vheap_chunk_uid_t zrtos_vheap_chunk_uid__error(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: