source: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2TaskPlugin.rb@ 374

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

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

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