mruby/c VM Source Code release 4.0.0
Loading...
Searching...
No Matches
rrt0.h
Go to the documentation of this file.
1
14
15#ifndef MRBC_SRC_RRT0_H_
16#define MRBC_SRC_RRT0_H_
17
18/***** Feature test switches ************************************************/
19/***** System headers *******************************************************/
20//@cond
21#include <stddef.h>
22#include <stdint.h>
23#include "vm_config.h"
24//@endcond
25
26/***** Local headers ********************************************************/
27#include "vm.h"
28
29#ifdef __cplusplus
30extern "C" {
31#endif
32/***** Constant values ******************************************************/
33
34//================================================
52
58
59static const int MRBC_TASK_DEFAULT_PRIORITY = 128;
61
62#if !defined(MRBC_TASK_NAME_LEN)
63#define MRBC_TASK_NAME_LEN 15
64#endif
65
66
67/***** Macros ***************************************************************/
68/***** Typedefs *************************************************************/
69
70struct RMutex;
71
72//================================================
76typedef struct RTcb {
77#if defined(MRBC_DEBUG)
78 uint8_t obj_mark_[4];
79#endif
80 struct RTcb *next;
81 uint8_t priority;
83 volatile uint8_t timeslice;
84 uint8_t state;
85 uint8_t reason;
87
88 union {
89 uint32_t wakeup_tick;
90 struct RMutex *mutex;
91 };
92 const struct RTcb *tcb_join;
93
94 struct VM vm;
95
97
98
99//================================================
103typedef struct RMutex {
104 volatile int lock;
105 struct RTcb *tcb;
107
108#define MRBC_MUTEX_INITIALIZER { 0 }
109
110
111/***** Global variables *****************************************************/
112/***** Function prototypes **************************************************/
113//@cond
114void mrbc_tick(void);
115mrbc_tcb *mrbc_tcb_new(int regs_size, enum MrbcTaskState task_state, int priority);
116mrbc_tcb *mrbc_create_task(const void *byte_code, mrbc_tcb *tcb);
117int mrbc_delete_task(mrbc_tcb *tcb);
118void mrbc_set_task_name(mrbc_tcb *tcb, const char *name);
119mrbc_tcb *mrbc_find_task(const char *name);
120int mrbc_start_task(mrbc_tcb *tcb);
121int mrbc_run(void);
122void mrbc_sleep_ms(mrbc_tcb *tcb, uint32_t ms);
123void mrbc_relinquish(mrbc_tcb *tcb);
125void mrbc_suspend_task(mrbc_tcb *tcb);
126void mrbc_resume_task(mrbc_tcb *tcb);
128void mrbc_join_task(mrbc_tcb *tcb, const mrbc_tcb *tcb_join);
133void mrbc_cleanup(void);
134void mrbc_init(void *heap_ptr, unsigned int size);
135void pq(const mrbc_tcb *p_tcb);
136void pqall(void);
137//@endcond
138
139
140/***** Inline functions *****************************************************/
141//================================================================
147static inline mrbc_tcb * mrbc_get_tcb( const mrbc_vm *vm )
148{
149 return (mrbc_tcb *)((uint8_t *)vm - offsetof(mrbc_tcb, vm));
150}
151
152
153#ifdef __cplusplus
154}
155#endif
156#endif // ifndef MRBC_SRC_RRT0_H_
void mrbc_join_task(mrbc_tcb *tcb, const mrbc_tcb *tcb_join)
Definition rrt0.c:673
void mrbc_set_task_name(mrbc_tcb *tcb, const char *name)
Definition rrt0.c:282
void mrbc_init(void *heap_ptr, unsigned int size)
Definition rrt0.c:1479
void mrbc_terminate_task(mrbc_tcb *tcb)
Definition rrt0.c:653
void mrbc_resume_task(mrbc_tcb *tcb)
Definition rrt0.c:621
int mrbc_mutex_unlock(mrbc_mutex *mutex, mrbc_tcb *tcb)
Definition rrt0.c:761
void mrbc_cleanup(void)
Definition rrt0.c:845
mrbc_tcb * mrbc_tcb_new(int regs_size, enum MrbcTaskState task_state, int priority)
Definition rrt0.c:203
mrbc_tcb * mrbc_find_task(const char *name)
Definition rrt0.c:300
mrbc_tcb * mrbc_create_task(const void *byte_code, mrbc_tcb *tcb)
Definition rrt0.c:228
void mrbc_tick(void)
Definition rrt0.c:145
mrbc_mutex * mrbc_mutex_init(mrbc_mutex *mutex)
Definition rrt0.c:698
void mrbc_change_priority(mrbc_tcb *tcb, int priority)
Definition rrt0.c:582
void mrbc_sleep_ms(mrbc_tcb *tcb, uint32_t ms)
Definition rrt0.c:509
int mrbc_mutex_trylock(mrbc_mutex *mutex, mrbc_tcb *tcb)
Definition rrt0.c:818
int mrbc_mutex_lock(mrbc_mutex *mutex, mrbc_tcb *tcb)
Definition rrt0.c:717
void mrbc_suspend_task(mrbc_tcb *tcb)
Definition rrt0.c:602
void mrbc_relinquish(mrbc_tcb *tcb)
Definition rrt0.c:569
int mrbc_start_task(mrbc_tcb *tcb)
Definition rrt0.c:323
int mrbc_run(void)
Definition rrt0.c:347
int mrbc_delete_task(mrbc_tcb *tcb)
Definition rrt0.c:262
struct RTcb mrbc_tcb
Task control block.
MrbcTaskState
Task state.
Definition rrt0.h:45
@ TASKSTATE_SUSPENDED
Suspended.
Definition rrt0.h:50
@ TASKSTATE_READY
Ready.
Definition rrt0.h:47
@ TASKSTATE_WAITING
Waiting.
Definition rrt0.h:49
@ TASKSTATE_RUNNING
Running.
Definition rrt0.h:48
@ TASKSTATE_DORMANT
Domant.
Definition rrt0.h:46
static const int MRBC_TASK_DEFAULT_STATE
Definition rrt0.h:60
struct RMutex mrbc_mutex
Mutex.
static mrbc_tcb * mrbc_get_tcb(const mrbc_vm *vm)
Definition rrt0.h:147
MrbcTaskReason
Definition rrt0.h:53
@ TASKREASON_JOIN
Definition rrt0.h:56
@ TASKREASON_MUTEX
Definition rrt0.h:55
@ TASKREASON_SLEEP
Definition rrt0.h:54
#define MRBC_TASK_NAME_LEN
Definition rrt0.h:63
static const int MRBC_TASK_DEFAULT_PRIORITY
Definition rrt0.h:59
Mutex.
Definition rrt0.h:103
volatile int lock
Definition rrt0.h:104
struct RTcb * tcb
Definition rrt0.h:105
Task control block.
Definition rrt0.h:76
uint8_t priority
task priority. initial value.
Definition rrt0.h:81
struct VM vm
Definition rrt0.h:94
char name[MRBC_TASK_NAME_LEN+1]
task name (optional)
Definition rrt0.h:86
const struct RTcb * tcb_join
joined task.
Definition rrt0.h:92
uint8_t priority_preemption
task priority. effective value.
Definition rrt0.h:82
uint8_t state
task state. defined in MrbcTaskState.
Definition rrt0.h:84
struct RMutex * mutex
Definition rrt0.h:90
volatile uint8_t timeslice
time slice counter.
Definition rrt0.h:83
uint8_t reason
sub state. defined in MrbcTaskReason.
Definition rrt0.h:85
uint32_t wakeup_tick
wakeup time for sleep state.
Definition rrt0.h:89
struct RTcb * next
daisy chain in task queue.
Definition rrt0.h:80
Virtual Machine.
Definition vm.h:150
mruby bytecode executor.
struct VM mrbc_vm
Virtual Machine.
Global configuration of mruby/c VM's.