source: asp3_tinet_ecnl_arm/trunk/asp3_dcre/tecsgen/tecslib/plugin/ATK1KernelPlugin.rb@ 352

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

arm向けASP3版ECNLを追加

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