Go to the source code of this file.
|
bool | zrtos_vheap__init (zrtos_vheap_t *thiz, void *heap, size_t heap_size) |
|
void * | zrtos_vheap__get_last_address (zrtos_vheap_t *thiz) |
|
void * | zrtos_vheap__get_stack_ptr (zrtos_vheap_t *thiz) |
|
size_t | _zrtos_vheap__get_free_space_ex (zrtos_vheap_t *thiz, void *stack_ptr) |
|
size_t | _zrtos_vheap__get_free_space (zrtos_vheap_t *thiz) |
|
zrtos_vheap_chunk_t * | zrtos_vheap__get_by_id (zrtos_vheap_t *thiz, zrtos_vheap_chunk_uid_t uid) |
|
zrtos_vheap_chunk_t * | zrtos_vheap__get_by_type (zrtos_vheap_t *thiz, zrtos_vheap_chunk_type_t type) |
|
zrtos_vheap_chunk_t * | zrtos_vheap__get_by_type_ex (zrtos_vheap_t *thiz, zrtos_vheap_type_t type) |
|
static zrtos_vheap_chunk_uid_t | zrtos_vheap__get_next_uid (zrtos_vheap_t *thiz) |
|
size_t | zrtos_vheap__get_chunk_count (zrtos_vheap_t *thiz) |
|
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) |
|
zrtos_vheap_chunk_uid_t | zrtos_vheap__malloc (zrtos_vheap_t *thiz, zrtos_vheap_chunk_uid_t parent, zrtos_vheap_type_t type, size_t length) |
|
static void | _zrtos_vheap__update_index_ptr (zrtos_vheap_t *thiz, zrtos_vheap_chunk_t *chunk, size_t sizeof_mem_chunk) |
|
zrtos_vheap_chunk_t * | zrtos_vheap__get_child (zrtos_vheap_t *thiz, zrtos_vheap_chunk_t *chunk) |
|
void | zrtos_vheap__free_helper (zrtos_vheap_t *thiz, zrtos_vheap_chunk_t *chunk) |
|
void | _zrtos_vheap__free (zrtos_vheap_t *thiz, zrtos_vheap_chunk_t *chunk) |
|
void | zrtos_vheap__free (zrtos_vheap_t *thiz, zrtos_vheap_chunk_uid_t uid) |
|
static void * | _zrtos_vheap__swap_to_heap_end (void *heap, size_t heap_length, size_t used_length, size_t chunk_offset, size_t chunk_length) |
|
void * | zrtos_vheap__page_in (zrtos_vheap_t *thiz, zrtos_vheap_chunk_t *chunk) |
|
void | zrtos_vheap__page_out (zrtos_vheap_t *thiz, zrtos_vheap_chunk_t *chunk, size_t length) |
|
◆ ZRTOS_VHEAP__EACH_BEGIN
#define ZRTOS_VHEAP__EACH_BEGIN |
( |
|
thiz, |
|
|
|
type, |
|
|
|
value |
|
) |
| |
Value:for(size_t l__ = 0,len__=(thiz)->length;l__ < len__;l__++){ \
bool zrtos_vheap_chunk__is_type_eq(zrtos_vheap_chunk_t *thiz, zrtos_vheap_type_t type)
Definition at line 406 of file vheap.h.
◆ ZRTOS_VHEAP__EACH_END
#define ZRTOS_VHEAP__EACH_END |
◆ ZRTOS_VHEAP__EACH_EX_BEGIN
#define ZRTOS_VHEAP__EACH_EX_BEGIN |
( |
|
thiz, |
|
|
|
start_offset, |
|
|
|
l, |
|
|
|
type, |
|
|
|
value |
|
) |
| |
Value:for(size_t l = start_offset,len__=(thiz)->length;l < len__;l++){ \
bool zrtos_vheap_chunk__is_type_eq(zrtos_vheap_chunk_t *thiz, zrtos_vheap_type_t type)
Definition at line 397 of file vheap.h.
◆ ZRTOS_VHEAP__EACH_EX_END
#define ZRTOS_VHEAP__EACH_EX_END |
◆ ZRTOS_VHEAP__GET
#define ZRTOS_VHEAP__GET |
( |
|
name | ) |
((zrtos_vheap_t*)&(name.heap[0])) |
◆ ZRTOS_VHEAP__INIT
#define ZRTOS_VHEAP__INIT |
( |
|
name, |
|
|
|
heap_size |
|
) |
| |
Value:static struct{ \
uint8_t heap[heap_size]; \
#define ZRTOS_ARCH__BYTE_ALIGNMENT
Definition at line 19 of file vheap.h.
◆ zrtos_vheap_t
◆ _zrtos_vheap__free()
Definition at line 275 of file vheap.h.
283 _zrtos_vheap__free_helper(thiz,last);
288 _zrtos_vheap__free_helper(thiz,chunk);
zrtos_vheap_chunk_t * zrtos_vheap__get_child(zrtos_vheap_t *thiz, zrtos_vheap_chunk_t *chunk)
◆ _zrtos_vheap__get_free_space()
Definition at line 74 of file vheap.h.
size_t _zrtos_vheap__get_free_space_ex(zrtos_vheap_t *thiz, void *stack_ptr)
void * zrtos_vheap__get_stack_ptr(zrtos_vheap_t *thiz)
◆ _zrtos_vheap__get_free_space_ex()
Definition at line 60 of file vheap.h.
#define ZRTOS_TYPES__MIN(a, b)
void * zrtos_vheap__get_last_address(zrtos_vheap_t *thiz)
size_t zrtos_types__ptr_get_byte_distance(void *bigger, void *smaller)
◆ _zrtos_vheap__malloc()
Definition at line 145 of file vheap.h.
154 if(free_space >= length_total){
157 size_t heap_length = thiz->
heap_size - index_length;
171 chunk->
first[0] = 0x55;
172 chunk->
first[1] = 0x55;
179 chunk->
last[0] = 0x66;
180 chunk->
last[1] = 0x66;
184 for(;node < chunk;node++){
190 zrtos_debug__memset(chunk->ptr,(
int)(pattern++),chunk->length);
struct _zrtos_vheap_chunk_t zrtos_vheap_chunk_t
#define ZRTOS_DEBUG__CODE(code)
void zrtos_mem__move_right_overlapping(void *dest, void *src, size_t length)
static zrtos_vheap_chunk_uid_t zrtos_vheap__get_next_uid(zrtos_vheap_t *thiz)
zrtos_vheap_chunk_uid_t uid
zrtos_vheap_chunk_type_t type
size_t _zrtos_vheap__get_free_space(zrtos_vheap_t *thiz)
zrtos_vheap_chunk_uid_t parent
◆ _zrtos_vheap__swap_to_heap_end()
static void* _zrtos_vheap__swap_to_heap_end |
( |
void * |
heap, |
|
|
size_t |
heap_length, |
|
|
size_t |
used_length, |
|
|
size_t |
chunk_offset, |
|
|
size_t |
chunk_length |
|
) |
| |
|
static |
Definition at line 299 of file vheap.h.
307 void *ret = buffer + heap_length - chunk_length;
309 buffer + chunk_offset
311 ,used_length - chunk_offset
315 ,buffer + used_length - chunk_length
void zrtos_mem__left_rotate(void *ptr, size_t length, size_t buffer_length)
void zrtos_mem__move_right_overlapping(void *dest, void *src, size_t length)
◆ _zrtos_vheap__update_index_ptr()
Definition at line 214 of file vheap.h.
219 size_t length = chunk->
length;
222 for(;node < sentinel;node++){
223 node->
ptr -= sizeof_mem_chunk + (node > chunk ? length : 0);
◆ zrtos_vheap__free()
Definition at line 291 of file vheap.h.
void _zrtos_vheap__free(zrtos_vheap_t *thiz, zrtos_vheap_chunk_t *chunk)
zrtos_vheap_chunk_t * zrtos_vheap__get_by_id(zrtos_vheap_t *thiz, zrtos_vheap_chunk_uid_t uid)
◆ zrtos_vheap__free_helper()
- Todo:
- cancel running task...
Definition at line 240 of file vheap.h.
245 size_t length = chunk->
length;
248 void *chunk_ptr = chunk->
ptr;
254 sentinel = chunk_ptr;
256 while(src < ((
uint8_t*)sentinel)){
struct _zrtos_vheap_chunk_t zrtos_vheap_chunk_t
#define ZRTOS_DEBUG__CODE(code)
void * zrtos_types__ptr_add(void *ptr, size_t byte_len)
static void _zrtos_vheap__update_index_ptr(zrtos_vheap_t *thiz, zrtos_vheap_chunk_t *chunk, size_t sizeof_mem_chunk)
◆ zrtos_vheap__get_by_id()
Definition at line 81 of file vheap.h.
86 for(
size_t l = thiz->
length;l--;node++){
zrtos_vheap_chunk_uid_t uid
◆ zrtos_vheap__get_by_type()
Definition at line 94 of file vheap.h.
99 for(
size_t l = thiz->
length;l--;node++){
zrtos_vheap_chunk_type_t type
◆ zrtos_vheap__get_by_type_ex()
Definition at line 107 of file vheap.h.
zrtos_vheap_chunk_t * zrtos_vheap__get_by_type(zrtos_vheap_t *thiz, zrtos_vheap_chunk_type_t type)
bool zrtos_vheap_chunk_type__init(zrtos_vheap_chunk_type_t *thiz, zrtos_vheap_type_t type)
◆ zrtos_vheap__get_child()
Definition at line 227 of file vheap.h.
231 for(;node < sentinel;node++){
int zrtos_vheap_chunk_uid__cmp(zrtos_vheap_chunk_uid_t *a, zrtos_vheap_chunk_uid_t *b)
zrtos_vheap_chunk_uid_t uid
zrtos_vheap_chunk_uid_t parent
◆ zrtos_vheap__get_chunk_count()
Definition at line 139 of file vheap.h.
struct _zrtos_vheap_chunk_t zrtos_vheap_chunk_t
◆ zrtos_vheap__get_last_address()
Definition at line 52 of file vheap.h.
void * zrtos_types__ptr_add(void *ptr, size_t byte_len)
◆ zrtos_vheap__get_next_uid()
Definition at line 119 of file vheap.h.
zrtos_vheap_chunk_t * zrtos_vheap__get_by_id(zrtos_vheap_t *thiz, zrtos_vheap_chunk_uid_t uid)
◆ zrtos_vheap__get_stack_ptr()
Definition at line 56 of file vheap.h.
#define ZRTOS_ARCH__GET_STACK_PTR()
◆ zrtos_vheap__init()
Definition at line 35 of file vheap.h.
41 zrtos_debug__memset(heap,0xEE,heap_size);
#define ZRTOS_DEBUG__CODE(code)
◆ zrtos_vheap__malloc()
Definition at line 196 of file vheap.h.
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)
zrtos_vheap_chunk_uid_t zrtos_vheap_chunk_uid__error(void)
zrtos_vheap_chunk_uid_t uid
◆ zrtos_vheap__page_in()
Definition at line 321 of file vheap.h.
327 void *chunk_ptr = chunk->
ptr;
struct _zrtos_vheap_chunk_t zrtos_vheap_chunk_t
static void * _zrtos_vheap__swap_to_heap_end(void *heap, size_t heap_length, size_t used_length, size_t chunk_offset, size_t chunk_length)
void * zrtos_types__ptr_add(void *ptr, size_t byte_len)
size_t zrtos_types__ptr_get_byte_distance(void *bigger, void *smaller)
static void _zrtos_vheap__update_index_ptr(zrtos_vheap_t *thiz, zrtos_vheap_chunk_t *chunk, size_t sizeof_mem_chunk)
void zrtos_vheap_chunk__set_type(zrtos_vheap_chunk_t *thiz, zrtos_vheap_type_t type)
◆ zrtos_vheap__page_out()
Definition at line 349 of file vheap.h.
363 chunk->
ptr = heap_end_ptr;
struct _zrtos_vheap_chunk_t zrtos_vheap_chunk_t
#define ZRTOS_DEBUG__CODE(code)
void zrtos_mem__left_rotate(void *ptr, size_t length, size_t buffer_length)
void * zrtos_types__ptr_add(void *ptr, size_t byte_len)
size_t zrtos_types__ptr_get_byte_distance(void *bigger, void *smaller)
zrtos_vheap_chunk_type_t type
void zrtos_vheap_chunk__set_type(zrtos_vheap_chunk_t *thiz, zrtos_vheap_type_t type)
void zrtos_mem__move_left_overlapping(void *dest, void *src, size_t length)