mruby/c VM Source Code release 3.4
Loading...
Searching...
No Matches
rrt0.c File Reference

Realtime multitask monitor for mruby/c. More...

#include "mrubyc.h"
#include "_autogen_class_rrt0.h"
Include dependency graph for rrt0.c:

Go to the source code of this file.

Macros

#define MRBC_SCHEDULER_EXIT   0
#define VM2TCB(p)
#define MRBC_MUTEX_TRACE(...)
#define NUM_TASK_QUEUE   4
#define q_dormant_   (task_queue_[0])
#define q_ready_   (task_queue_[1])
#define q_waiting_   (task_queue_[2])
#define q_suspended_   (task_queue_[3])

Functions

static void q_insert_task (mrbc_tcb *p_tcb)
static void q_delete_task (mrbc_tcb *p_tcb)
static void preempt_running_task (void)
void mrbc_tick (void)
mrbc_tcbmrbc_tcb_new (int regs_size, enum MrbcTaskState task_state, int priority)
mrbc_tcbmrbc_create_task (const void *byte_code, mrbc_tcb *tcb)
int mrbc_delete_task (mrbc_tcb *tcb)
void mrbc_set_task_name (mrbc_tcb *tcb, const char *name)
mrbc_tcbmrbc_find_task (const char *name)
int mrbc_start_task (mrbc_tcb *tcb)
int mrbc_run (void)
void mrbc_sleep_ms (mrbc_tcb *tcb, uint32_t ms)
void mrbc_wakeup_task (mrbc_tcb *tcb)
void mrbc_relinquish (mrbc_tcb *tcb)
void mrbc_change_priority (mrbc_tcb *tcb, int priority)
void mrbc_suspend_task (mrbc_tcb *tcb)
void mrbc_resume_task (mrbc_tcb *tcb)
void mrbc_terminate_task (mrbc_tcb *tcb)
void mrbc_join_task (mrbc_tcb *tcb, const mrbc_tcb *tcb_join)
mrbc_mutexmrbc_mutex_init (mrbc_mutex *mutex)
int mrbc_mutex_lock (mrbc_mutex *mutex, mrbc_tcb *tcb)
int mrbc_mutex_unlock (mrbc_mutex *mutex, mrbc_tcb *tcb)
int mrbc_mutex_trylock (mrbc_mutex *mutex, mrbc_tcb *tcb)
void mrbc_cleanup (void)
static void c_sleep (mrbc_vm *vm, mrbc_value v[], int argc)
void mrbc_init (void *heap_ptr, unsigned int size)

Variables

static mrbc_tcbtask_queue_ [NUM_TASK_QUEUE]
static volatile uint32_t tick_
static volatile uint32_t wakeup_tick_ = (1 << 16)

Detailed Description

Realtime multitask monitor for mruby/c.

Copyright (C) 2015- Kyushu Institute of Technology.
Copyright (C) 2015- Shimane IT Open-Innovation Center.

This file is distributed under BSD 3-Clause License.

Definition in file rrt0.c.

Macro Definition Documentation

◆ MRBC_MUTEX_TRACE

#define MRBC_MUTEX_TRACE ( ...)
Value:
((void)0)

Definition at line 32 of file rrt0.c.

◆ MRBC_SCHEDULER_EXIT

#define MRBC_SCHEDULER_EXIT   0

Definition at line 28 of file rrt0.c.

◆ NUM_TASK_QUEUE

#define NUM_TASK_QUEUE   4

Definition at line 38 of file rrt0.c.

◆ q_dormant_

#define q_dormant_   (task_queue_[0])

Definition at line 40 of file rrt0.c.

◆ q_ready_

#define q_ready_   (task_queue_[1])

Definition at line 41 of file rrt0.c.

◆ q_suspended_

#define q_suspended_   (task_queue_[3])

Definition at line 43 of file rrt0.c.

◆ q_waiting_

#define q_waiting_   (task_queue_[2])

Definition at line 42 of file rrt0.c.

◆ VM2TCB

#define VM2TCB ( p)
Value:
((mrbc_tcb *)((uint8_t *)p - offsetof(mrbc_tcb, vm)))
struct RTcb mrbc_tcb
Task control block.

Definition at line 31 of file rrt0.c.

Function Documentation

◆ c_sleep()

void c_sleep ( mrbc_vm * vm,
mrbc_value v[],
int argc )
static

(method) sleep for a specified number of seconds (CRuby compatible)

Definition at line 858 of file rrt0.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ mrbc_change_priority()

void mrbc_change_priority ( mrbc_tcb * tcb,
int priority )

change task priority.

Parameters
tcbtarget task.
prioritypriority value. between 1 and 255.

Definition at line 580 of file rrt0.c.

Here is the call graph for this function:

◆ mrbc_cleanup()

void mrbc_cleanup ( void )

clenaup all resources.

Definition at line 844 of file rrt0.c.

Here is the call graph for this function:

◆ mrbc_create_task()

mrbc_tcb * mrbc_create_task ( const void * byte_code,
mrbc_tcb * tcb )

Create a task specifying bytecode to be executed.

Parameters
byte_codepointer to VM byte code.
tcbTask control block with parameter, or NULL.
Returns
Pointer to mrbc_tcb or NULL.

Definition at line 227 of file rrt0.c.

Here is the call graph for this function:

◆ mrbc_delete_task()

int mrbc_delete_task ( mrbc_tcb * tcb)

Delete a task.

Parameters
tcbTask control block.
Returns
Pointer to mrbc_tcb or NULL.

Definition at line 262 of file rrt0.c.

Here is the call graph for this function:

◆ mrbc_find_task()

mrbc_tcb * mrbc_find_task ( const char * name)

find task by name

Parameters
nametask name
Returns
pointer to mrbc_tcb or NULL

Definition at line 300 of file rrt0.c.

◆ mrbc_init()

void mrbc_init ( void * heap_ptr,
unsigned int size )

initialize

Parameters
heap_ptrheap memory buffer.
sizeits size.

Definition at line 1479 of file rrt0.c.

Here is the call graph for this function:

◆ mrbc_join_task()

void mrbc_join_task ( mrbc_tcb * tcb,
const mrbc_tcb * tcb_join )

join the task.

Parameters
tcbtarget task.
tcb_joinjoin task.

Definition at line 671 of file rrt0.c.

Here is the call graph for this function:

◆ mrbc_mutex_init()

mrbc_mutex * mrbc_mutex_init ( mrbc_mutex * mutex)

mutex initialize

Parameters
mutexpointer to mrbc_mutex or NULL.

Definition at line 696 of file rrt0.c.

Here is the call graph for this function:

◆ mrbc_mutex_lock()

int mrbc_mutex_lock ( mrbc_mutex * mutex,
mrbc_tcb * tcb )

mutex lock

Parameters
mutexpointer to mutex.
tcbpointer to TCB.

Definition at line 716 of file rrt0.c.

Here is the call graph for this function:

◆ mrbc_mutex_trylock()

int mrbc_mutex_trylock ( mrbc_mutex * mutex,
mrbc_tcb * tcb )

mutex trylock

Parameters
mutexpointer to mutex.
tcbpointer to TCB.

Definition at line 817 of file rrt0.c.

◆ mrbc_mutex_unlock()

int mrbc_mutex_unlock ( mrbc_mutex * mutex,
mrbc_tcb * tcb )

mutex unlock

Parameters
mutexpointer to mutex.
tcbpointer to TCB.

Definition at line 760 of file rrt0.c.

Here is the call graph for this function:

◆ mrbc_relinquish()

void mrbc_relinquish ( mrbc_tcb * tcb)

Relinquish control to other tasks.

Parameters
tcbtarget task.

Definition at line 567 of file rrt0.c.

◆ mrbc_resume_task()

void mrbc_resume_task ( mrbc_tcb * tcb)

resume the task

Parameters
tcbtarget task.

Definition at line 619 of file rrt0.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ mrbc_run()

int mrbc_run ( void )

execute

Definition at line 347 of file rrt0.c.

Here is the call graph for this function:

◆ mrbc_set_task_name()

void mrbc_set_task_name ( mrbc_tcb * tcb,
const char * name )

set the task name.

Parameters
tcbtarget task.
nametask name

Definition at line 282 of file rrt0.c.

◆ mrbc_sleep_ms()

void mrbc_sleep_ms ( mrbc_tcb * tcb,
uint32_t ms )

Alternative to mrbc_run for Wasm build

sleep for a specified number of milliseconds.

Parameters
tcbtarget task.
mssleep milliseconds.

Definition at line 507 of file rrt0.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ mrbc_start_task()

int mrbc_start_task ( mrbc_tcb * tcb)

Start execution of dormant task.

Parameters
tcbtarget task.
Return values
intzero / no error.

Definition at line 323 of file rrt0.c.

Here is the call graph for this function:

◆ mrbc_suspend_task()

void mrbc_suspend_task ( mrbc_tcb * tcb)

Suspend the task.

Parameters
tcbtarget task.

Definition at line 600 of file rrt0.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ mrbc_tcb_new()

mrbc_tcb * mrbc_tcb_new ( int regs_size,
enum MrbcTaskState task_state,
int priority )

create (allocate) TCB.

Parameters
regs_sizenum of allocated registers.
task_statetask initial state.
prioritytask priority.
Returns
pointer to TCB or NULL.

Code example

// If you want specify default value, see below.
// regs_size: MAX_REGS_SIZE (in vm_config.h)
// task_state: MRBC_TASK_DEFAULT_STATE
// priority: MRBC_TASK_DEFAULT_PRIORITY
mrbc_tcb *tcb;
mrbc_create_task( byte_code, tcb );
mrbc_tcb * mrbc_tcb_new(int regs_size, enum MrbcTaskState task_state, int priority)
Definition rrt0.c:200
mrbc_tcb * mrbc_create_task(const void *byte_code, mrbc_tcb *tcb)
Definition rrt0.c:227
static const int MRBC_TASK_DEFAULT_STATE
Definition rrt0.h:56
static const int MRBC_TASK_DEFAULT_PRIORITY
Definition rrt0.h:55
#define MAX_REGS_SIZE
Definition vm_config.h:23

Definition at line 200 of file rrt0.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ mrbc_terminate_task()

void mrbc_terminate_task ( mrbc_tcb * tcb)

terminate the task.

Parameters
tcbtarget task.
Note
This API simply ends the task. note that this does not affect the lock status of mutex.

Definition at line 651 of file rrt0.c.

Here is the call graph for this function:

◆ mrbc_tick()

void mrbc_tick ( void )

Tick timer interrupt handler.

Definition at line 142 of file rrt0.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ mrbc_wakeup_task()

void mrbc_wakeup_task ( mrbc_tcb * tcb)

wake up the task.

Parameters
tcbtarget task.

Definition at line 531 of file rrt0.c.

Here is the call graph for this function:

◆ preempt_running_task()

void preempt_running_task ( void )
inlinestatic

preempt running task

Definition at line 126 of file rrt0.c.

Here is the caller graph for this function:

◆ q_delete_task()

void q_delete_task ( mrbc_tcb * p_tcb)
static

Delete task(TCB) from task queue

Parameters
p_tcbPointer to target TCB

Definition at line 96 of file rrt0.c.

Here is the caller graph for this function:

◆ q_insert_task()

void q_insert_task ( mrbc_tcb * p_tcb)
static

Insert task(TCB) to task queue

Parameters
p_tcbPointer to target TCB

Put the task (TCB) into a queue by each state. TCB must be free. (must not be in another queue) The queue is sorted in priority_preemption order. If the same priority_preemption value is in the TCB and queue, it will be inserted at the end of the same value in queue.

Definition at line 62 of file rrt0.c.

Here is the caller graph for this function:

Variable Documentation

◆ task_queue_

mrbc_tcb* task_queue_[NUM_TASK_QUEUE]
static

Definition at line 39 of file rrt0.c.

◆ tick_

volatile uint32_t tick_
static

Definition at line 44 of file rrt0.c.

◆ wakeup_tick_

volatile uint32_t wakeup_tick_ = (1 << 16)
static

Definition at line 45 of file rrt0.c.