This is a port of the mruby/c tutorial Chapter 03 to the mbed environment.

Dependencies:   mbed

For details, refer to the following.

http://www.s-itoc.jp/activity/research/mrubyc/mrubyc_tutorial/436

Note:There is a change in rtt0.h from the original source in the mruby/c. It was necessary for inclusion in C ++ source.

Revision:
0:33feccbba3ff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mrubyc/vm.h	Wed Feb 15 01:03:35 2017 +0000
@@ -0,0 +1,140 @@
+/*! @file
+  @brief
+  mruby bytecode executor.
+
+  <pre>
+  Copyright (C) 2015 Kyushu Institute of Technology.
+  Copyright (C) 2015 Shimane IT Open-Innovation Center.
+
+  This file is distributed under BSD 3-Clause License.
+
+  Fetch mruby VM bytecodes, decode and execute.
+
+  </pre>
+*/
+
+#ifndef MRBC_SRC_VM_H_
+#define MRBC_SRC_VM_H_
+
+#include <stdint.h>
+#include "value.h"
+#include "vm_config.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+//================================================================
+/*!@brief
+
+*/
+typedef struct IREP {
+  int16_t unused;       //! unused flag
+  struct IREP *next;         //! irep linked list
+
+  uint8_t *code;
+  mrb_object *ptr_to_pool;
+  uint8_t *ptr_to_sym;
+
+  int16_t nlocals;
+  int16_t nregs;
+  int16_t rlen;
+  int32_t ilen;
+
+  int16_t iseq;
+
+} mrb_irep;
+
+
+//================================================================
+/*!@brief
+
+*/
+typedef struct CALLINFO {
+  mrb_irep *pc_irep;
+  uint32_t pc;
+  uint32_t reg_top;
+  uint8_t n_args;   // num of args
+} mrb_callinfo;
+
+
+//================================================================
+/*!@brief
+
+*/
+typedef struct VM {
+  mrb_irep *irep;    // irep linked list
+
+  uint8_t vm_id;     // vm_id : 1..n
+  int16_t priority;  //
+  const uint8_t *mrb;      // bytecode
+
+  mrb_irep *pc_irep;  // PC
+  int16_t pc;       // PC
+
+  int reg_top;
+  mrb_value regs[MAX_REGS_SIZE];
+  int callinfo_top;
+  mrb_callinfo callinfo[MAX_CALLINFO_SIZE];
+
+  mrb_class *target_class;
+  mrb_object *top_self;  // ?
+
+  int32_t error_code;
+
+  volatile int8_t flag_preemption;
+} mrb_vm;
+
+
+
+mrb_irep *new_irep(mrb_vm *vm);
+struct VM *vm_open(void);
+void vm_close(struct VM *vm);
+void vm_boot(struct VM *vm);
+int vm_run(struct VM *vm);
+
+
+//================================================================
+/*!@brief
+  Get 32bit value from memory big endian.
+
+  @param  s	Pointer of memory.
+  @return	32bit unsigned value.
+*/
+inline static uint32_t bin_to_uint32( const void *s )
+{
+  uint8_t *s1 = (uint8_t *)s;
+  uint32_t ret;
+
+  ret = *s1++;
+  ret = (ret << 8) + *s1++;
+  ret = (ret << 8) + *s1++;
+  ret = (ret << 8) + *s1;
+  return ret;
+}
+
+
+//================================================================
+/*!@brief
+  Get 16bit value from memory big endian.
+
+  @param  s	Pointer of memory.
+  @return	16bit unsigned value.
+*/
+inline static uint16_t bin_to_uint16( const void *s )
+{
+  uint8_t *s1 = (uint8_t *)s;
+  uint16_t ret;
+
+  ret = *s1++;
+  ret = (ret << 8) + *s1;
+  return ret;
+}
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif
+