source: EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2TaskPlugin.rb@ 321

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

文字コードを設定

  • 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
4# Generator for TOPPERS Embedded Component System
5#
6# Copyright (C) 2008-2014 by TOPPERS Project
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#++
38
39#require "HRP2KernelObjectPlugin"
40require_tecsgen_lib "HRP2KernelObjectPlugin.rb"
41#== celltype プラグインの共通の親クラス
42class HRP2TaskPlugin < HRP2KernelObjectPlugin
43 # @@ep = [:eActivateTask, :eControlTask, :eManageTask, :eReferTask ]
44 # ATT_MODを生成済みかどうか
45 @@generate_memory_module = false
46
47 ##
48 #
49 # file : output file (ex.tecsgen.cfg)
50 # cell :
51 # val :
52 # tab :
53 def print_cfg_cre(file, cell, val, tab)
54 val[:id] = val[:id].gsub( /(^|[^\$])\$id\$/, "\\1#{@celltype.get_name.to_s}_#{cell.get_name.to_s}" )
55 # $cbp$の代わり
56 index = cell.get_id - @celltype.get_id_base
57 #cell_CB_name = "#{@celltype.get_global_name}_pCB_tab[#{index}]"
58 cell_CB_name = "#{index}"
59 # CRE_XXX/DEF_XXXの生成
60 print "assign task plugin\n"
61 domainOption = cell.get_region.get_domain_root.get_domain_type.get_option
62 # if cell.get_region.get_region_type == :DOMAIN
63 if domainOption != "OutOfDomain"
64 # 保護ドメインに属する場合
65 if domainOption == "trusted"
66 # カーネルドメイン
67 if val[:userStackSize] != "OMIT"
68 raise "system task cannot have user stack."
69 end
70 file.print <<EOT
71#{tab}CRE_TSK(#{val[:id]}, { #{val[:taskAttribute]}, #{cell_CB_name}, tTask_start_task, #{val[:priority]}, #{val[:systemStackSize]}, NULL });
72EOT
73 else
74 # ユーザドメイン
75 if val[:userStackSize] == "OMIT"
76 raise "user task must have user stack."
77 end
78 if val[:systemStackSize] == "OMIT"
79 file.print <<EOT
80#{tab}CRE_TSK(#{val[:id]}, { #{val[:taskAttribute]}, #{cell_CB_name}, tTask_start_task, #{val[:priority]}, #{val[:userStackSize]}, NULL });
81EOT
82 else
83 file.print <<EOT
84#{tab}CRE_TSK(#{val[:id]}, { #{val[:taskAttribute]}, #{cell_CB_name}, tTask_start_task, #{val[:priority]}, #{val[:userStackSize]}, NULL, #{val[:systemStackSize]}, NULL });
85EOT
86 end
87 end
88 else
89 # 無所属の場合
90 raise "task #{val[:id]} must belong to a domain."
91 end
92
93 # 例外用のを生成
94 file.print <<EOT
95#{tab}DEF_TEX(#{val[:id]}, { #{val[:exceptionAttribute]}, tTask_start_exception });
96EOT
97 end
98
99 def print_cfg_sac(file, val, acv)
100 file.puts "SAC_TSK(#{val[:id]}, { #{acv[0]}, #{acv[1]}, #{acv[2]}, #{acv[3]} });"
101 end
102
103=begin
104 #tTaskの受け口リスト
105 def get_entry_ports_name_list()
106 @@ep
107 end
108=end
109 #
110 # ATT_MODの生成
111 # gen_factory実行時には,すべてのセルタイププラグインを生成済みのはずなので,
112 # カーネルAPIコードのメモリ保護を省略できる.
113 #
114 def gen_factory file
115 super
116 if @@generate_memory_module == false
117 check_celltype_list = []
118
119 Cell.get_cell_list2.each { |cell|
120 # すべてのセルを走査してセルタイプをチェック
121 ct = cell.get_celltype
122 if ct.class == Celltype && check_celltype_list.include?( ct ) == false
123 # 未チェックのセルタイプだった場合
124 # puts "check for ATT_MOD : #{ct.classget_global_name}"
125 puts "check for ATT_MOD : #{ct.get_global_name}"
126
127 # カーネルAPIのコード,データはメモリ保護しない
128 next if HRP2KernelObjectPlugin.include_celltype?( ct )
129
130 # 必要のないセルタイプのコード,データはメモリ保護しない
131 next if ! ct.need_generate?
132
133 # HRP2のドメインリージョンを取得
134 regions = ct.get_domain_roots
135 regions_hrp2 = regions[ :HRP2 ]
136 print "HRP2 domain in #{ct.get_name}: "
137 regions_hrp2.each { |reg|
138 print reg.get_name
139 }
140 puts ""
141
142 # セル管理ブロックとスケルトンのメモリ保護
143 # gen_celltype_names_domain 相当の処理
144 if regions_hrp2.include?( Region.get_root ) == false && regions_hrp2.length > 1
145 # ドメインが複数で,OutOfDomainにセルが存在しないセルタイプの場合
146 # 共有のセル管理ブロックとスケルトンコードを登録する
147 file = AppFile.open( "#{$gen}/tecsgen.cfg" )
148 file.print "ATT_MOD(\"#{ct.get_global_name}_tecsgen.o\");\n"
149 file.close
150 end
151
152 regions_hrp2.each { |reg|
153 if reg.is_root?
154 nsp = ""
155 else
156 nsp = "_#{reg.get_namespace_path.get_global_name}"
157 end
158 file = AppFile.open( "#{$gen}/tecsgen#{nsp}.cfg" )
159 file.print "ATT_MOD(\"#{ct.get_global_name}#{nsp}_tecsgen.o\");\n"
160 file.close
161 }
162
163 # セルタイプコードがない場合はスキップ
164 next if ct.is_all_entry_inline? && ! ct.is_active?
165
166 # セルタイプコードのメモリ保護
167 # gen_celltype_names_domain2 相当の処理
168 if regions_hrp2.include?( Region.get_root ) == true || regions_hrp2.length > 1
169 # OutOfDomainにセルが存在するセルタイプの場合
170 # または,複数のドメインにセルが存在するセルタイプの場合
171 # セルタイプコードを共有するように登録する
172 file = AppFile.open( "#{$gen}/tecsgen.cfg" )
173 else
174 # OutOfDomainでない単一のドメインにセルが存在するセルタイプの場合
175 # セルタイプコードを専有するように登録する
176 file = AppFile.open( "#{$gen}/tecsgen_#{regions_hrp2[0].get_namespace_path.get_global_name}.cfg" )
177 end
178
179 file.print "ATT_MOD(\"#{ct.get_global_name}.o\");\n"
180 file.close
181
182 check_celltype_list << ct
183 else
184 # 何もしない
185 end
186 }
187
188 @@generate_memory_module = true
189 else
190 # 何もしない
191 end
192 end
193
194end
195
Note: See TracBrowser for help on using the repository browser.