Class: HRP2TaskPlugin
- Inherits:
-
HRP2KernelObjectPlugin
- Object
- Node
- Plugin
- CelltypePlugin
- HRP2KernelObjectPlugin
- HRP2TaskPlugin
- Defined in:
- lib/tecsgen/plugin/HRP2TaskPlugin.rb
Overview
celltype プラグインの共通の親クラス
Constant Summary collapse
- @@generate_memory_module =
@@ep = [:eActivateTask, :eControlTask, :eManageTask, :eReferTask ] ATT_MODを生成済みかどうか
false
Constants inherited from Plugin
Instance Method Summary collapse
-
#gen_factory(file) ⇒ Object
ATT_MODの生成 gen_factory実行時には,すべてのセルタイププラグインを生成済みのはずなので, カーネルAPIコードのメモリ保護を省略できる..
-
#print_cfg_cre(file, cell, val, tab) ⇒ Object
file : output file (ex.tecsgen.cfg) cell : val : tab :.
- #print_cfg_sac(file, val, acv) ⇒ Object
Methods inherited from HRP2KernelObjectPlugin
check_referenced_cells, get_celltype_list, #get_entry_ports_name_list, include_celltype?, include_region, #initialize, isChecked, set_celltype, set_region_list, #string_cfg_cre
Methods inherited from CelltypePlugin
gen_post_code, #initialize, #new_cell
Methods inherited from Plugin
#cdl_error, #check_plugin_arg, #gen_cdl_file, #gen_ep_func?, #gen_postamble, #gen_preamble, #initialize, #new_cell, #parse_plugin_arg, #print_msg, #set_locale, #set_silent
Methods inherited from Node
#cdl_error, #cdl_error2, #cdl_error3, #cdl_info, #cdl_info2, #cdl_warning, #cdl_warning2, #get_locale, #initialize, #locale_str, #set_locale
Constructor Details
This class inherits a constructor from HRP2KernelObjectPlugin
Instance Method Details
#gen_factory(file) ⇒ Object
ATT_MODの生成
gen_factory実行時には,すべてのセルタイププラグインを生成済みのはずなので,
カーネルAPIコードのメモリ保護を省略できる.
119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 |
# File 'lib/tecsgen/plugin/HRP2TaskPlugin.rb', line 119 def gen_factory(file) super if @@generate_memory_module == false check_celltype_list = [] Cell.get_cell_list2.each {|cell| # すべてのセルを走査してセルタイプをチェック ct = cell.get_celltype if ct.class == Celltype && check_celltype_list.include?(ct) == false # チェック済みセルタイプに登録 check_celltype_list << ct # 未チェックのセルタイプだった場合 # puts "check for ATT_MOD : #{ct.classget_global_name}" puts "check for ATT_MOD : #{ct.get_global_name}" # カーネルAPIのコード,データはメモリ保護しない next if HRP2KernelObjectPlugin.include_celltype?(ct) # 必要のないセルタイプのコード,データはメモリ保護しない next if !ct.need_generate? # HRP2のドメインリージョンを取得 regions = ct.get_domain_roots regions_hrp2 = regions[:HRP2] dbgPrint "HRP2 domain in #{ct.get_name}: " regions_hrp2.each {|reg| dbgPrint reg.get_name } puts "" # セル管理ブロックとスケルトンのメモリ保護 # gen_celltype_names_domain 相当の処理 if regions_hrp2.include?(Region.get_root) == false && regions_hrp2.length > 1 # ドメインが複数で,OutOfDomainにセルが存在しないセルタイプの場合 # 共有のセル管理ブロックとスケルトンコードを登録する file = AppFile.open("#{$gen}/tecsgen.cfg") file.print "ATT_MOD(\"#{ct.get_global_name}_tecsgen.o\");\n" file.close end regions_hrp2.each {|reg| if reg.is_root? nsp = "" else nsp = "_#{reg.get_namespace_path.get_global_name}" end file = AppFile.open("#{$gen}/tecsgen#{nsp}.cfg") file.print "ATT_MOD(\"#{ct.get_global_name}#{nsp}_tecsgen.o\");\n" file.close } # セルタイプコードがない場合はスキップ next if ct.is_all_entry_inline? && !ct.is_active? # セルタイプコードのメモリ保護 # gen_celltype_names_domain2 相当の処理 if regions_hrp2.include?(Region.get_root) == true || regions_hrp2.length > 1 # OutOfDomainにセルが存在するセルタイプの場合 # または,複数のドメインにセルが存在するセルタイプの場合 # セルタイプコードを共有するように登録する file = AppFile.open("#{$gen}/tecsgen.cfg") else # OutOfDomainでない単一のドメインにセルが存在するセルタイプの場合 # セルタイプコードを専有するように登録する file = AppFile.open("#{$gen}/tecsgen_#{regions_hrp2[0].get_namespace_path.get_global_name}.cfg") end file.print "ATT_MOD(\"#{ct.get_global_name}.o\");\n" file.close else # 何もしない end } @@generate_memory_module = true else # 何もしない end end |
#print_cfg_cre(file, cell, val, tab) ⇒ Object
file : output file (ex.tecsgen.cfg) cell : val : tab :
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
# File 'lib/tecsgen/plugin/HRP2TaskPlugin.rb', line 53 def print_cfg_cre(file, cell, val, tab) # val[:id] = val[:id].gsub( /(^|[^\$])\$id\$/, "\\1#{@celltype.get_name.to_s}_#{cell.get_global_name.to_s}" ) # val[:id] = @celltype.subst_name( val[:id], @celltype.get_name_array( cell ) ) # $cbp$の代わり index = cell.get_id - @celltype.get_id_base # cell_CB_name = "#{@celltype.get_global_name}_pCB_tab[#{index}]" cell_CB_name = index.to_s # CRE_XXX/DEF_XXXの生成 dbgPrint "assign task plugin\n" domainOption = cell.get_region.get_domain_root.get_domain_type.get_option # if cell.get_region.get_region_type == :DOMAIN # cell.show_tree 1 if domainOption != "OutOfDomain" # 保護ドメインに属する場合 if domainOption == "trusted" # カーネルドメイン if val[:userStackSize] != "OMIT" raise "system task cannot have user stack." end p "CRE_TSK 0 user=#{val[:userStackSize]} system=#{val[:systemStackSize]}" file.print <<EOT #{tab}CRE_TSK(#{val[:id]}, { #{val[:taskAttribute]}, #{cell_CB_name}, tTask_start_task, #{val[:priority]}, #{val[:systemStackSize]}, NULL }); EOT else # ユーザドメイン if val[:userStackSize] == "OMIT" raise "user task must have user stack." end p "CRE_TSK 1" if val[:systemStackSize] == "OMIT" file.print <<EOT #{tab}CRE_TSK(#{val[:id]}, { #{val[:taskAttribute]}, #{cell_CB_name}, tTask_start_task, #{val[:priority]}, #{val[:userStackSize]}, NULL }); EOT else p "CRE_TSK 2" file.print <<EOT #{tab}CRE_TSK(#{val[:id]}, { #{val[:taskAttribute]}, #{cell_CB_name}, tTask_start_task, #{val[:priority]}, #{val[:userStackSize]}, NULL, #{val[:systemStackSize]}, NULL }); EOT end end else # 無所属の場合 raise "task #{val[:id]} must belong to a domain." end # 例外用のを生成 file.print <<EOT #{tab}DEF_TEX(#{val[:id]}, { #{val[:exceptionAttribute]}, tTask_start_exception }); EOT end |
#print_cfg_sac(file, val, acv) ⇒ Object
104 105 106 |
# File 'lib/tecsgen/plugin/HRP2TaskPlugin.rb', line 104 def print_cfg_sac(file, val, acv) file.puts "SAC_TSK(#{val[:id]}, { #{acv[0]}, #{acv[1]}, #{acv[2]}, #{acv[3]} });" end |