Mon 16 Mar 11:09:06 CET 2026
This commit is contained in:
parent
e48c212e0d
commit
9fec172b3a
55
src/mem.h
Normal file
55
src/mem.h
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
#ifndef _MEM_H
|
||||
#define _MEM_H
|
||||
|
||||
/*
|
||||
Code segment occupied by a task, required for cleanup on task end and code memory partitioning.
|
||||
Forked tasks inherit segment from parent task.
|
||||
A task can use more than one segment, e.g., there is only one context (task)
|
||||
which handles the main programm and single line statements modifying the state of the task (and heap).
|
||||
*/
|
||||
typedef struct {
|
||||
int8_t used;
|
||||
address_t bottom; // start
|
||||
address_t top; // end
|
||||
index_t refcount; // contains function and procedures referenced by heap;
|
||||
// no disposal of segment allowed if > 0
|
||||
#if PROFILE>0
|
||||
index_t ntoken;
|
||||
unsigned long micros;
|
||||
#endif
|
||||
} segment_t;
|
||||
|
||||
|
||||
/*
|
||||
Shared data and code memory
|
||||
-------
|
||||
heap |
|
||||
v
|
||||
|
||||
^
|
||||
code |
|
||||
-----.
|
||||
*/
|
||||
|
||||
typedef struct {
|
||||
unsigned char *data; // entire heap
|
||||
int size;
|
||||
int top; // top of heap, growing down
|
||||
int bottom; // top of code, growing up
|
||||
segment_t segments[MAXTASKS]; // parts of the heap
|
||||
segment_t *segment; // current segment (used by code compiler)
|
||||
} mem_t;
|
||||
|
||||
|
||||
#define ADDRESS(M,addr) *(address_t*)(&M->data[addr])
|
||||
#define CHAR(M,addr) M->data[addr]
|
||||
#define INDEX(M,addr) *(index_t*)(&M->data[addr])
|
||||
#define NUMBER(M,addr) *(number_t*)(&M->data[addr])
|
||||
#define CHECKHEAP(M,addr) (addr>M->top && addr<M->size)
|
||||
|
||||
void MemInit(mem_t *M,int size,unsigned char *data);
|
||||
void MemReset(mem_t *M);
|
||||
segment_t *AllocSegment(mem_t *M);
|
||||
int ReleaseSegment(mem_t *M, segment_t *S);
|
||||
|
||||
#endif
|
||||
Loading…
Reference in New Issue
Block a user