mruby/c VM Source Code release 3.4
Loading...
Searching...
No Matches
rrt0.h
Go to the documentation of this file.
1
12
13#ifndef MRBC_SRC_RRT0_H_
14#define MRBC_SRC_RRT0_H_
15
16/***** Feature test switches ************************************************/
17/***** System headers *******************************************************/
18//@cond
19#include <stdint.h>
20//@endcond
21
22/***** Local headers ********************************************************/
23#include "vm.h"
24
25#ifdef __cplusplus
26extern "C" {
27#endif
28/***** Constant values ******************************************************/
29
30//================================================
48
54
55static const int MRBC_TASK_DEFAULT_PRIORITY = 128;
57
58#if !defined(MRBC_TASK_NAME_LEN)
59#define MRBC_TASK_NAME_LEN 15
60#endif
61
62
63/***** Macros ***************************************************************/
64/***** Typedefs *************************************************************/
65
66struct RMutex;
67
68//================================================
72typedef struct RTcb {
73#if defined(MRBC_DEBUG)
74 uint8_t obj_mark_[4];
75#endif
76 struct RTcb *next;
77 uint8_t priority;
79 volatile uint8_t timeslice;
80 uint8_t state;
81 uint8_t reason;
83
84 union {
85 uint32_t wakeup_tick;
86 struct RMutex *mutex;
87 };
88 const struct RTcb *tcb_join;
89
90 struct VM vm;
91
93
94
95//================================================
99typedef struct RMutex {
100 volatile int lock;
101 struct RTcb *tcb;
103
104#define MRBC_MUTEX_INITIALIZER { 0 }
105
106
107/***** Global variables *****************************************************/
108/***** Function prototypes **************************************************/
109//@cond
110void mrbc_tick(void);
111mrbc_tcb *mrbc_tcb_new(int regs_size, enum MrbcTaskState task_state, int priority);
112mrbc_tcb *mrbc_create_task(const void *byte_code, mrbc_tcb *tcb);
113int mrbc_delete_task(mrbc_tcb *tcb);
114void mrbc_set_task_name(mrbc_tcb *tcb, const char *name);
115mrbc_tcb *mrbc_find_task(const char *name);
116int mrbc_start_task(mrbc_tcb *tcb);
117int mrbc_run(void);
118void mrbc_sleep_ms(mrbc_tcb *tcb, uint32_t ms);
119void mrbc_relinquish(mrbc_tcb *tcb);
121void mrbc_suspend_task(mrbc_tcb *tcb);
122void mrbc_resume_task(mrbc_tcb *tcb);
124void mrbc_join_task(mrbc_tcb *tcb, const mrbc_tcb *tcb_join);
129void mrbc_cleanup(void);
130void mrbc_init(void *heap_ptr, unsigned int size);
131void pq(const mrbc_tcb *p_tcb);
132void pqall(void);
133//@endcond
134
135
136/***** Inline functions *****************************************************/
137
138
139#ifdef __cplusplus
140}
141#endif
142#endif // ifndef MRBC_SRC_RRT0_H_
void mrbc_join_task(mrbc_tcb *tcb, const mrbc_tcb *tcb_join)
Definition rrt0.c:671
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:651
void mrbc_resume_task(mrbc_tcb *tcb)
Definition rrt0.c:619
int mrbc_mutex_unlock(mrbc_mutex *mutex, mrbc_tcb *tcb)
Definition rrt0.c:760
void mrbc_cleanup(void)
Definition rrt0.c:844
mrbc_tcb * mrbc_tcb_new(int regs_size, enum MrbcTaskState task_state, int priority)
Definition rrt0.c:200
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:227
void mrbc_tick(void)
Definition rrt0.c:142
mrbc_mutex * mrbc_mutex_init(mrbc_mutex *mutex)
Definition rrt0.c:696
void mrbc_change_priority(mrbc_tcb *tcb, int priority)
Definition rrt0.c:580
void mrbc_sleep_ms(mrbc_tcb *tcb, uint32_t ms)
Definition rrt0.c:507
int mrbc_mutex_trylock(mrbc_mutex *mutex, mrbc_tcb *tcb)
Definition rrt0.c:817
int mrbc_mutex_lock(mrbc_mutex *mutex, mrbc_tcb *tcb)
Definition rrt0.c:716
void mrbc_suspend_task(mrbc_tcb *tcb)
Definition rrt0.c:600
void mrbc_relinquish(mrbc_tcb *tcb)
Definition rrt0.c:567
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:41
@ TASKSTATE_SUSPENDED
Suspended.
Definition rrt0.h:46
@ TASKSTATE_READY
Ready.
Definition rrt0.h:43
@ TASKSTATE_WAITING
Waiting.
Definition rrt0.h:45
@ TASKSTATE_RUNNING
Running.
Definition rrt0.h:44
@ TASKSTATE_DORMANT
Domant.
Definition rrt0.h:42
static const int MRBC_TASK_DEFAULT_STATE
Definition rrt0.h:56
struct RMutex mrbc_mutex
Mutex.
MrbcTaskReason
Definition rrt0.h:49
@ TASKREASON_JOIN
Definition rrt0.h:52
@ TASKREASON_MUTEX
Definition rrt0.h:51
@ TASKREASON_SLEEP
Definition rrt0.h:50
#define MRBC_TASK_NAME_LEN
Definition rrt0.h:59
static const int MRBC_TASK_DEFAULT_PRIORITY
Definition rrt0.h:55
Mutex.
Definition rrt0.h:99
volatile int lock
Definition rrt0.h:100
struct RTcb * tcb
Definition rrt0.h:101
Task control block.
Definition rrt0.h:72
uint8_t priority
task priority. initial value.
Definition rrt0.h:77
struct VM vm
Definition rrt0.h:90
char name[MRBC_TASK_NAME_LEN+1]
task name (optional)
Definition rrt0.h:82
const struct RTcb * tcb_join
joined task.
Definition rrt0.h:88
uint8_t priority_preemption
task priority. effective value.
Definition rrt0.h:78
uint8_t state
task state. defined in MrbcTaskState.
Definition rrt0.h:80
struct RMutex * mutex
Definition rrt0.h:86
volatile uint8_t timeslice
time slice counter.
Definition rrt0.h:79
uint8_t reason
sub state. defined in MrbcTaskReason.
Definition rrt0.h:81
uint32_t wakeup_tick
wakeup time for sleep state.
Definition rrt0.h:85
struct RTcb * next
daisy chain in task queue.
Definition rrt0.h:76
Virtual Machine.
Definition vm.h:140
mruby bytecode executor.