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

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

SDカードの挿抜を検知するよう更新

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