source: asp3_tinet_ecnl_arm/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tMrubyVM.c@ 374

Last change on this file since 374 was 374, checked in by coas-nagasima, 5 years ago

mbed関連を更新
シリアルドライバをmbedのHALを使うよう変更
ファイルディスクリプタの処理を更新

  • Property charset set to UTF-8
  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-csrc
File size: 7.5 KB
Line 
1/*
2 * Copyright (C) 2008-2017 by TOPPERS Project
3 *
4 * 上記著作権者
5は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
6 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
7 * 変・再é…
8å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
9 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
10 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
11 * スコード中に含まれていること.
12 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
13 * 用できる形で再é…
14å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
15å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
16 * 者
17マニュアルなど)に,上記の著作権表示,この利用条件および下記
18 * の無保証規定を掲載すること.
19 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
20 * 用できない形で再é…
21å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
22 * と.
23 * (a) 再é…
24å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
25マニュアルなど)に,上記の著
26 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
27 * (b) 再é…
28å¸ƒã®å½¢æ…
29‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
30 * 報告すること.
31 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
32 * 害からも,上記著作権者
33およびTOPPERSプロジェクトをå…
34è²¬ã™ã‚‹ã“と.
35 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
36 * 由に基づく請求からも,上記著作権者
37およびTOPPERSプロジェクトを
38 * å…
39è²¬ã™ã‚‹ã“と.
40 *
41 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者
42お
43 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
44 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
45 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
46 * の責任を負わない.
47 *
48 * @(#) $Id$
49 */
50
51/* #[<PREAMBLE>]#
52 * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
53 * tecsmerge によるマージに使用されます
54 *
55 * 属性アクセスマクロ #_CAAM_#
56 * irep uint8_t* ATTR_irep
57 * var_irep mrb_irep* VAR_var_irep
58 * mrb mrb_state* VAR_mrb
59 * rproc struct RProc* VAR_rproc
60 *
61 * 呼び口関数 #_TCPF_#
62 * call port: cInit signature: nMruby_sInitializeBridge context:task optional:true
63 * bool_t is_cInit_joined() check if joined
64 * void cInit_initializeBridge( const mrb_state* mrb );
65 * call port: cMalloc signature: sMalloc context:task
66 * int cMalloc_initializeMemoryPool( );
67 * void* cMalloc_calloc( size_t nelem, size_t elem_size );
68 * void* cMalloc_malloc( size_t size );
69 * void* cMalloc_realloc( const void* ptr, size_t new_size );
70 * void cMalloc_free( const void* ptr );
71 *
72 * #[</PREAMBLE>]# */
73
74/* プロトタイプ宣言や変数の定義をここに書きます #_PAC_# */
75#include "nMruby_tMrubyVM_tecsgen.h"
76#include <string.h>
77
78#include <mruby.h>
79#include <mruby/proc.h>
80#include <mruby/data.h>
81#include <mruby/compile.h>
82#include "t_syslog.h"
83
84MRB_API mrb_state* mrb_open_TECS( CELLCB *p_cellcb);
85
86#ifndef E_OK
87#define E_OK 0 /* success */
88#define E_ID (-18) /* illegal ID */
89#endif
90
91/* 受け口関数 #_TEPF_# */
92/* #[<ENTRY_PORT>]# eMrubyVM
93 * entry port: eMrubyVM
94 * signature: nMruby_sMrubyVM
95 * context: task
96 * #[</ENTRY_PORT>]# */
97
98/* #[<ENTRY_FUNC>]# eMrubyVM_initialize
99 * name: eMrubyVM_initialize
100 * global_name: nMruby_tMrubyVM_eMrubyVM_initialize
101 * oneway: false
102 * #[</ENTRY_FUNC>]# */
103bool_t
104eMrubyVM_initialize(CELLIDX idx)
105{
106 CELLCB *p_cellcb;
107 if (VALID_IDX(idx)) {
108 p_cellcb = GET_CELLCB(idx);
109 }
110 else {
111 /* エラー処理コードをここに記述します */
112 return false;
113 } /* end if VALID_IDX(idx) */
114
115 cMalloc_initializeMemoryPool();
116 /* ここに処理本体を記述します #_TEFB_# */
117 /* new interpreter instance */
118 //VAR_mrb = mrb_open();
119 VAR_mrb = mrb_open_TECS(p_cellcb);
120 if (VAR_mrb == NULL) {
121 syslog(LOG_EMERG, "Invalid mrb_state, exiting test driver");
122// cSerialPort_write("Invalid mrb_state, exiting test driver\n", 39);
123 return false;
124 }
125
126 if(is_cInit_joined()){
127 // TECS Bridge
128 cInit_initializeBridge( VAR_mrb );
129 }
130 VAR_var_irep = mrb_read_irep(VAR_mrb, ATTR_irep);
131 VAR_rproc = mrb_proc_new(VAR_mrb, VAR_var_irep);
132 return true;
133}
134
135/* #[<ENTRY_FUNC>]# eMrubyVM_run
136 * name: eMrubyVM_run
137 * global_name: nMruby_tMrubyVM_eMrubyVM_run
138 * oneway: false
139 * #[</ENTRY_FUNC>]# */
140bool_t
141eMrubyVM_run(CELLIDX idx)
142{
143 CELLCB *p_cellcb;
144 if (VALID_IDX(idx)) {
145 p_cellcb = GET_CELLCB(idx);
146 }
147 else {
148 /* エラー処理コードをここに記述します */
149 } /* end if VALID_IDX(idx) */
150
151 /* ここに処理本体を記述します #_TEFB_# */
152 mrb_run(VAR_mrb, VAR_rproc, mrb_top_self(VAR_mrb));
153 if (VAR_mrb->exc) {
154 mrb_p(VAR_mrb, mrb_obj_value(VAR_mrb->exc));
155 return false;
156 }
157 return true;
158}
159
160/* #[<ENTRY_FUNC>]# eMrubyVM_funcall
161 * name: eMrubyVM_funcall
162 * global_name: nMruby_tMrubyVM_eMrubyVM_funcall
163 * oneway: false
164 * #[</ENTRY_FUNC>]# */
165void
166eMrubyVM_funcall(CELLIDX idx, const char_t* name)
167{
168 CELLCB *p_cellcb;
169 mrb_int argc;
170 if (VALID_IDX(idx)) {
171 p_cellcb = GET_CELLCB(idx);
172 }
173 else {
174 /* エラー処理コードをここに記述します */
175 } /* end if VALID_IDX(idx) */
176
177 /* ここに処理本体を記述します #_TEFB_# */
178 argc = 0;
179 (void)mrb_funcall(VAR_mrb, mrb_top_self(VAR_mrb), name, argc );
180}
181
182/* #[<ENTRY_FUNC>]# eMrubyVM_finalize
183 * name: eMrubyVM_finalize
184 * global_name: nMruby_tMrubyVM_eMrubyVM_finalize
185 * oneway: false
186 * #[</ENTRY_FUNC>]# */
187void
188eMrubyVM_finalize(CELLIDX idx)
189{
190 CELLCB *p_cellcb;
191 if (VALID_IDX(idx)) {
192 p_cellcb = GET_CELLCB(idx);
193 }
194 else {
195 /* エラー処理コードをここに記述します */
196 } /* end if VALID_IDX(idx) */
197
198 /* ここに処理本体を記述します #_TEFB_# */
199 syslog(LOG_EMERG, "end of mruby program");
200 mrb_close(VAR_mrb);
201}
202
203/* #[<POSTAMBLE>]#
204 * これより下に非受け口関数を書きます
205 * #[</POSTAMBLE>]#*/
206
207#include "tlsf.h"
208void*
209mrb_TECS_allocf(mrb_state *mrb, void *p, size_t size, void *ud)
210{
211 CELLCB *p_cellcb= (CELLCB *)ud;
212 if (size == 0) {
213 cMalloc_free(p);
214 //tlsf_free(p);
215 return NULL;
216 }
217 else if (p){
218 //return tlsf_realloc(p,size);
219 return cMalloc_realloc(p, size);
220 }
221 else {
222 //return tlsf_malloc(size);
223 return cMalloc_malloc(size);
224 }
225}
226
227// p_cellcb は VM のもの
228// VM セルタイプに、呼び口 call sMalloc cMalloc; を設ける
229// mrb_TECS_allocf を参ç…
230§
231MRB_API mrb_state*
232mrb_open_TECS( CELLCB *p_cellcb)
233{
234 return mrb_open_allocf(mrb_TECS_allocf, (void *)p_cellcb);
235};
236
237/*** ダミー関数 ***/
238#ifndef EV3_SOUND
239void _write(){}
240void _close(){}
241void _lseek(){}
242void _read(){}
243//void _fstat(){}
244//void _isatty(){}
245#endif
246
247//void _exit(){}
248//void _getpid(){}
249//void _kill(){}
250void _gettimeofday(){}
251void _fini(){}
252
Note: See TracBrowser for help on using the repository browser.