source: EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/plugin/ATK1KernelPlugin.rb@ 270

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

mruby版ECNLプロトタイピング・ツールを追加

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-ruby
File size: 9.1 KB
Line 
1# -*- coding: utf-8 -*-
2#
3# TECS Generator Cell-type plugin
4# for TOPPERS Embedded Component System
5#
6# Copyright (C) 2008-2014 by TOPPERS Project TECS-WG
7#--
8# 上記著作権者
9は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
10# ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
11# 変・再é…
12å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
13# (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
14# 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
15# スコード中に含まれていること.
16# (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
17# 用できる形で再é…
18å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
19å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
20# 者
21マニュアルなど)に,上記の著作権表示,この利用条件および下記
22# の無保証規定を掲載すること.
23# (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
24# 用できない形で再é…
25å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
26# と.
27# (a) 再é…
28å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
29マニュアルなど)に,上記の著
30# 作権表示,この利用条件および下記の無保証規定を掲載すること.
31# (b) 再é…
32å¸ƒã®å½¢æ…
33‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
34# 報告すること.
35# (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
36# 害からも,上記著作権者
37およびTOPPERSプロジェクトをå…
38è²¬ã™ã‚‹ã“と.
39# また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
40# 由に基づく請求からも,上記著作権者
41およびTOPPERSプロジェクトを
42# å…
43è²¬ã™ã‚‹ã“と.
44#
45# 本ソフトウェアは,無保証で提供されているものである.上記著作権者
46お
47# よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
48# に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
49# アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
50# の責任を負わない.
51#
52# $Id
53#++
54
55#== celltype プラグインのå…
56±é€šã®è¦ªã‚¯ãƒ©ã‚¹
57class ATK1KernelPlugin < CelltypePlugin
58#@celltype:: Celltype
59#@option:: String :オプション文字列
60 @@cell_list = []
61
62 #signature:: Celltype シグニチャ(インスタンス)
63 def initialize( celltype, option )
64 super
65 end
66
67 #=== CDL ファイルの生成
68 # typedef, signature, celltype, cell のコードを生成
69 # 重複して生成してはならない
70 # すでに生成されている場合は出力しないこと。
71 # もしくは同名の import により、重複を避けること。
72 #file:: FILE 生成するファイル
73# def gen_cdl_file file
74# end
75
76 def new_cell cell
77# join_list = cell.get_join_list
78# a = join_list.get_item( :resource )
79# if a == nil
80# Generator.error( "resource: must be initialized")
81# elsif ! a.get_rhs.instance_of? Array
82# Generator.error( "resource: initializer must be in format of '{val1, val2 ...}'")
83# end
84 @@cell_list << cell
85 end
86
87 #=== 受け口関数の本体(C言語)を生成する
88 # このメソッドが未定義の場合、ジェネレータは受け口関数のテンプレートを生成する
89 # このメソッドが定義済みの場合、(テンプレートではなく、変更する必
90要のない)セルタイプコードを生成する
91 #file:: FILE 出力å…
92ˆãƒ•ã‚¡ã‚¤ãƒ«
93 #b_singleton:: bool true if singleton
94 #ct_name:: Symbol
95 #global_ct_name:: string
96 #sig_name:: string
97 #ep_name:: string
98 #func_name:: string
99 #func_global_name:: string
100 #func_type:: class derived from Type
101# def gen_ep_func_body( file, b_singleton, ct_name, global_ct_name, sig_name, ep_name, func_name, func_global_name, func_type, params )
102# end
103
104 def gen_factory file
105
106 file2 = CFile.open( "#{$gen}/Kernel_tecsgen.oil", "w" )
107
108 # Kernel
109 @celltype.get_cell_list.each { |cell|
110
111 if cell.is_generate?
112
113 file2.print "\tOS #{cell.get_name} {\n"
114
115 # STATUS
116 join = cell.get_join_list.get_item( :status )
117 if join then
118 str = join.get_rhs.to_s.gsub(/^"(.*)"$/, '\1')
119 file2.print "\t\tSTATUS = #{str};\n"
120 end
121
122 # STARTUPHOOK
123 join = cell.get_join_list.get_item( :useStartupHook )
124 if join then
125 str = join.get_rhs.to_s
126 file2.print "\t\tSTARTUPHOOK = #{str};\n"
127 end
128
129 # ERRORHOOK
130 join = cell.get_join_list.get_item( :useErrorHook )
131 if join then
132 str = join.get_rhs.to_s
133 file2.print "\t\tERRORHOOK = #{str};\n"
134 end
135
136 # SHUTDOWNHOOK
137 join = cell.get_join_list.get_item( :useShutdownHook )
138 if join then
139 str = join.get_rhs.to_s
140 file2.print "\t\tSHUTDOWNHOOK = #{str};\n"
141 end
142
143 # PRETASKHOOK
144 join = cell.get_join_list.get_item( :usePreTaskHook )
145 if join then
146 str = join.get_rhs.to_s
147 file2.print "\t\tPRETASKHOOK = #{str};\n"
148 end
149
150 # POSTASKHOOK
151 join = cell.get_join_list.get_item( :usePostTaskHook )
152 if join then
153 str = join.get_rhs.to_s
154 file2.print "\t\tPOSTTASKHOOK = #{str};\n"
155 end
156
157 # USEGETSERVICEID
158 join = cell.get_join_list.get_item( :useGetServiceId )
159 if join then
160 str = join.get_rhs.to_s
161 file2.print "\t\tUSEGETSERVICEID = #{str};\n"
162 end
163
164 # USEPARAMETERACCESS
165 join = cell.get_join_list.get_item( :useParameterAccess )
166 if join then
167 str = join.get_rhs.to_s
168 file2.print "\t\tUSEPARAMETERACCESS = #{str};\n"
169 end
170
171 # USERESSCHEDULER
172 join = cell.get_join_list.get_item( :useResourceScheduler )
173 if join then
174 str = join.get_rhs.to_s
175 file2.print "\t\tUSERESSCHEDULER = #{str};\n"
176 end
177
178 file2.print "\t};\n\n"
179
180 end
181
182 }
183
184 file2.close
185
186 # 追記するために AppFile を使う(文字コード変換されない)
187 file2 = AppFile.open( "#{$gen}/tKernel_tecsgen.#{$c_suffix}" )
188 file2.print "\n/* Generated by ATK1KernelPlugin */\n\n"
189 @celltype.get_cell_list.each { |cell|
190 if cell.is_generate?
191 name_array = @celltype.get_name_array( cell )
192
193 join = cell.get_join_list.get_item( :useStartupHook )
194 if join then
195 str = join.get_rhs.to_s
196 if str == "TRUE" then
197 file2.print <<EOT
198#ifdef USE_STARTUPHOOK
199void StartupHook(void)
200{
201/* CELLCB *p_cellcb = #{name_array[8]}; */
202 INT32 i;
203 for(i = 0; i < N_CP_cStartupHookBody; i++){
204 cStartupHookBody_main(i);
205 }
206}
207#endif /* USE_STARTUPHOOK */
208EOT
209 end
210 end
211
212 join = cell.get_join_list.get_item( :useErrorHook )
213 if join then
214 str = join.get_rhs.to_s
215 if str == "TRUE" then
216 file2.print <<EOT
217#ifdef USE_ERRORHOOK
218void ErrorHook(StatusType ercd)
219{
220/* CELLCB *p_cellcb = #{name_array[8]}; */
221 cErrorHookBody_main( ercd );
222}
223#endif /* USE_ERRORHOOK */
224
225EOT
226 end
227 end
228
229 join = cell.get_join_list.get_item( :useShutdownHook )
230 if join then
231 str = join.get_rhs.to_s
232 if str == "TRUE" then
233 file2.print <<EOT
234#ifdef USE_SHUTDOWNHOOK
235void ShutdownHook(StatusType ercd)
236{
237/* CELLCB *p_cellcb = #{name_array[8]}; */
238 INT32 i;
239 for(i = 0; i < N_CP_cShutdownHookBody; i++){
240 cShutdownHookBody_main( i, ercd );
241 }
242}
243#endif /* USE_SHUTDOWNHOOK */
244
245EOT
246 end
247 end
248
249 join = cell.get_join_list.get_item( :usePreTaskHook )
250 if join then
251 str = join.get_rhs.to_s
252 if str == "TRUE" then
253 file2.print <<EOT
254#ifdef USE_PRETASKHOOK
255void PreTaskHook(void)
256{
257/* CELLCB *p_cellcb = #{name_array[8]}; */
258 cPreTaskHookBody_main();
259}
260#endif /* USE_PRETASKHOOK */
261
262EOT
263 end
264 end
265
266 join = cell.get_join_list.get_item( :usePostTaskHook )
267 if join then
268 str = join.get_rhs.to_s
269 if str == "TRUE" then
270 file2.print <<EOT
271#ifdef USE_POSTTASKHOOK
272void PostTaskHook(void)
273{
274/* CELLCB *p_cellcb = #{name_array[8]}; */
275 cPostTaskHookBody_main();
276}
277#endif /* USE_POSTTASKHOOK */
278
279EOT
280 end
281 end
282
283 end
284 }
285
286 file2.close
287
288 end
289
290 def self.gen_post_code file
291
292 @@cell_list.each { |cell|
293 join = cell.get_join_list.get_item( :useResourceScheduler )
294 if join then
295 flag = join.get_rhs.to_s
296 if flag == "TRUE" then
297 file.print <<EOT
298cell tResource RES_SCHEDULER {
299 property = "STANDARD";
300};
301EOT
302 else
303 file.print <<EOT
304EOT
305 end
306 end
307 }
308
309 end
310
311end
312
Note: See TracBrowser for help on using the repository browser.