tecscde 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +12 -0
- data/.rubocop.yml +125 -0
- data/.rubocop_todo.yml +188 -0
- data/CHANGELOG.md +3 -0
- data/Gemfile +6 -0
- data/LICENSE +46 -0
- data/LICENSE.ja +32 -0
- data/README.ja.md +200 -0
- data/README.md +35 -0
- data/Rakefile +27 -0
- data/bin/tecscde +64 -0
- data/glade/tecscde-cell-property.glade +205 -0
- data/glade/tecscde-celltype-property.glade +172 -0
- data/glade/tecscde-celltype.glade +414 -0
- data/glade/tecscde-export.glade +161 -0
- data/glade/test-cell-plugin.rb +51 -0
- data/glade/test-cell-property.rb +35 -0
- data/glade/test-export.rb +35 -0
- data/glade/test-palette.rb +26 -0
- data/lib/tcflow.rb +148 -0
- data/lib/tecscde.rb +65 -0
- data/lib/tecscde/NewCell.png +0 -0
- data/lib/tecscde/SelectArrow.png +0 -0
- data/lib/tecscde/attr_tree_view.rb +253 -0
- data/lib/tecscde/cell_plugin_dialog.glade +294 -0
- data/lib/tecscde/cell_plugin_dialog.rb +89 -0
- data/lib/tecscde/celltype_tree_view.rb +105 -0
- data/lib/tecscde/change_set_control.rb +35 -0
- data/lib/tecscde/change_set_control/change_set.rb +32 -0
- data/lib/tecscde/change_set_control/change_set_manager.rb +62 -0
- data/lib/tecscde/command.rb +35 -0
- data/lib/tecscde/control.rb +491 -0
- data/lib/tecscde/highlighted_objects.rb +180 -0
- data/lib/tecscde/logger.rb +74 -0
- data/lib/tecscde/main_view_and_model.rb +80 -0
- data/lib/tecscde/palette.glade +553 -0
- data/lib/tecscde/palette.rb +174 -0
- data/lib/tecscde/preferences.glade +117 -0
- data/lib/tecscde/preferences.rb +44 -0
- data/lib/tecscde/tecs_model.rb +1137 -0
- data/lib/tecscde/tecs_model/hbar.rb +68 -0
- data/lib/tecscde/tecs_model/tm_c_port.rb +122 -0
- data/lib/tecscde/tecs_model/tm_c_port_array.rb +98 -0
- data/lib/tecscde/tecs_model/tm_cell.rb +496 -0
- data/lib/tecscde/tecs_model/tm_e_port.rb +126 -0
- data/lib/tecscde/tecs_model/tm_e_port_array.rb +78 -0
- data/lib/tecscde/tecs_model/tm_join.rb +293 -0
- data/lib/tecscde/tecs_model/tm_join_bar.rb +146 -0
- data/lib/tecscde/tecs_model/tm_port.rb +238 -0
- data/lib/tecscde/tecs_model/tm_port_array.rb +246 -0
- data/lib/tecscde/tecs_model/tm_region.rb +107 -0
- data/lib/tecscde/tecs_model/tm_uneditable.rb +68 -0
- data/lib/tecscde/tecs_model/vbar.rb +68 -0
- data/lib/tecscde/templates/_cell_info.cde.erb +15 -0
- data/lib/tecscde/templates/_join_info.cde.erb +28 -0
- data/lib/tecscde/templates/main.cde.erb +49 -0
- data/lib/tecscde/tm_object.rb +91 -0
- data/lib/tecscde/version.rb +4 -0
- data/lib/tecscde/view.rb +58 -0
- data/lib/tecscde/view/cairo_matrix.rb +90 -0
- data/lib/tecscde/view/canvas.rb +59 -0
- data/lib/tecscde/view/constants.rb +114 -0
- data/lib/tecscde/view/main_view.rb +1245 -0
- data/lib/tecsflow.rb +475 -0
- data/lib/tecsflow/C_parser.tab.rb +2471 -0
- data/lib/tecsflow/C_parser.y.rb +1087 -0
- data/lib/tecsflow/classes.rb +421 -0
- data/lib/tecsgen.rb +581 -0
- data/lib/tecsgen/core/C_parser.tab.rb +2477 -0
- data/lib/tecsgen/core/C_parser.y +1032 -0
- data/lib/tecsgen/core/bnf-deb.tab.rb +5193 -0
- data/lib/tecsgen/core/bnf.tab.rb +5193 -0
- data/lib/tecsgen/core/bnf.y +2211 -0
- data/lib/tecsgen/core/componentobj.rb +7901 -0
- data/lib/tecsgen/core/ctypes.rb +226 -0
- data/lib/tecsgen/core/expression.rb +1031 -0
- data/lib/tecsgen/core/gen_xml.rb +374 -0
- data/lib/tecsgen/core/generate.rb +5206 -0
- data/lib/tecsgen/core/location.rb +116 -0
- data/lib/tecsgen/core/messages.rb +101 -0
- data/lib/tecsgen/core/optimize.rb +456 -0
- data/lib/tecsgen/core/plugin.rb +332 -0
- data/lib/tecsgen/core/pluginModule.rb +165 -0
- data/lib/tecsgen/core/syntaxobj.rb +1234 -0
- data/lib/tecsgen/core/tecs_lang.rb +306 -0
- data/lib/tecsgen/core/tecsgen.rb +453 -0
- data/lib/tecsgen/core/tecsinfo.rb +860 -0
- data/lib/tecsgen/core/tool_info.rb +258 -0
- data/lib/tecsgen/core/types.rb +1632 -0
- data/lib/tecsgen/core/unjoin_plugin.rb +218 -0
- data/lib/tecsgen/core/value.rb +650 -0
- data/lib/tecsgen/messages/messages_console_en_US.rb +1171 -0
- data/lib/tecsgen/messages/messages_console_ja_JP.rb +1171 -0
- data/lib/tecsgen/messages/messages_file_en_US.rb +334 -0
- data/lib/tecsgen/messages/messages_file_ja_JP.rb +163 -0
- data/lib/tecsgen/plugin/ATK1AlarmPlugin.rb +196 -0
- data/lib/tecsgen/plugin/ATK1DelayTaskPlugin.rb +106 -0
- data/lib/tecsgen/plugin/ATK1EventPlugin.rb +147 -0
- data/lib/tecsgen/plugin/ATK1ISRPlugin.rb +174 -0
- data/lib/tecsgen/plugin/ATK1KernelPlugin.rb +287 -0
- data/lib/tecsgen/plugin/ATK1ResourcePlugin.rb +124 -0
- data/lib/tecsgen/plugin/ATK1TaskPlugin.rb +220 -0
- data/lib/tecsgen/plugin/C2TECSBridgePlugin.rb +210 -0
- data/lib/tecsgen/plugin/CellPlugin.rb +61 -0
- data/lib/tecsgen/plugin/CelltypePlugin.rb +72 -0
- data/lib/tecsgen/plugin/CompositePlugin.rb +66 -0
- data/lib/tecsgen/plugin/DomainPlugin.rb +89 -0
- data/lib/tecsgen/plugin/HRP2AlarmHandlerPlugin.rb +76 -0
- data/lib/tecsgen/plugin/HRP2Cache.rb +1 -0
- data/lib/tecsgen/plugin/HRP2CyclicHandlerPlugin.rb +75 -0
- data/lib/tecsgen/plugin/HRP2DataqueuePlugin.rb +68 -0
- data/lib/tecsgen/plugin/HRP2EventflagPlugin.rb +68 -0
- data/lib/tecsgen/plugin/HRP2FixedSizeMemoryPoolPlugin.rb +68 -0
- data/lib/tecsgen/plugin/HRP2HandlerPlugin.rb +117 -0
- data/lib/tecsgen/plugin/HRP2KernelObjectPlugin.rb +372 -0
- data/lib/tecsgen/plugin/HRP2ObjectPlugin.rb +94 -0
- data/lib/tecsgen/plugin/HRP2Plugin.rb +140 -0
- data/lib/tecsgen/plugin/HRP2PostHook.rb +111 -0
- data/lib/tecsgen/plugin/HRP2PriorityDataqueuePlugin.rb +66 -0
- data/lib/tecsgen/plugin/HRP2RPCPlugin.rb +319 -0
- data/lib/tecsgen/plugin/HRP2SVCPlugin.rb +473 -0
- data/lib/tecsgen/plugin/HRP2SemaphorePlugin.rb +67 -0
- data/lib/tecsgen/plugin/HRP2TaskPlugin.rb +200 -0
- data/lib/tecsgen/plugin/HRPHandlerPlugin.rb +125 -0
- data/lib/tecsgen/plugin/HRPKernelObjectManager.rb +72 -0
- data/lib/tecsgen/plugin/HRPKernelObjectPlugin.rb +333 -0
- data/lib/tecsgen/plugin/HRPObjectPlugin.rb +93 -0
- data/lib/tecsgen/plugin/HRPPlugin.rb +356 -0
- data/lib/tecsgen/plugin/HRPRPCPlugin.rb +407 -0
- data/lib/tecsgen/plugin/HRPSVCPlugin.rb +859 -0
- data/lib/tecsgen/plugin/HRPTaskPlugin.rb +107 -0
- data/lib/tecsgen/plugin/Mruby2CBridgePlugin.rb +86 -0
- data/lib/tecsgen/plugin/MrubyBridgeCellPlugin.rb +264 -0
- data/lib/tecsgen/plugin/MrubyBridgeCelltypePlugin.rb +293 -0
- data/lib/tecsgen/plugin/MrubyBridgeCompositePlugin.rb +49 -0
- data/lib/tecsgen/plugin/MrubyBridgePlugin.rb +67 -0
- data/lib/tecsgen/plugin/MrubyBridgeSignaturePlugin.rb +1307 -0
- data/lib/tecsgen/plugin/MrubyInfoBridgePlugin.rb +14 -0
- data/lib/tecsgen/plugin/MrubyInfoBridgeSignaturePlugin.rb +994 -0
- data/lib/tecsgen/plugin/MultiPlugin.rb +57 -0
- data/lib/tecsgen/plugin/NotifierPlugin.rb +1217 -0
- data/lib/tecsgen/plugin/OpaqueMarshalerPlugin.rb +81 -0
- data/lib/tecsgen/plugin/OpaqueRPCPlugin.rb +323 -0
- data/lib/tecsgen/plugin/RPCPlugin.rb +266 -0
- data/lib/tecsgen/plugin/RepeatCellPlugin.rb +166 -0
- data/lib/tecsgen/plugin/RepeatJoinPlugin.rb +130 -0
- data/lib/tecsgen/plugin/SharedOpaqueRPCPlugin.rb +357 -0
- data/lib/tecsgen/plugin/SharedRPCPlugin.rb +329 -0
- data/lib/tecsgen/plugin/SignaturePlugin.rb +77 -0
- data/lib/tecsgen/plugin/TECS2CBridgePlugin.rb +178 -0
- data/lib/tecsgen/plugin/TECSInfoPlugin.rb +280 -0
- data/lib/tecsgen/plugin/ThroughPlugin.rb +333 -0
- data/lib/tecsgen/plugin/TracePlugin.rb +484 -0
- data/lib/tecsgen/plugin/lib/GenHRP2Marshaler.rb +761 -0
- data/lib/tecsgen/plugin/lib/GenOpaqueMarshaler.rb +1107 -0
- data/lib/tecsgen/plugin/lib/GenParamCopy.rb +365 -0
- data/lib/tecsgen/plugin/lib/GenTransparentMarshaler.rb +683 -0
- data/lib/tecsgen/plugin/lib/MrubyBridgeCelltypePluginModule.rb +283 -0
- data/lib/tecsgen/plugin/lib/MrubyBridgeSignaturePluginModule.rb +277 -0
- data/lib/tecsgen/version.rb +6 -0
- data/samples/FigureSamples/active/active.cde +104 -0
- data/samples/FigureSamples/active/active.cdl +20 -0
- data/samples/FigureSamples/active/active.pdf +0 -0
- data/samples/FigureSamples/active/active.png +0 -0
- data/samples/FigureSamples/active/gen/tmp_C_src.c +36 -0
- data/samples/FigureSamples/active/gen/tmp_cygwin_tecs.h +1908 -0
- data/samples/FigureSamples/active/gen/tmp_plugin_post_code.cdl +0 -0
- data/samples/FigureSamples/allocator/allocator-internal.png +0 -0
- data/samples/FigureSamples/allocator/allocator.cde +171 -0
- data/samples/FigureSamples/allocator/allocator.cdl +58 -0
- data/samples/FigureSamples/allocator/allocator.png +0 -0
- data/samples/FigureSamples/basic/Makefile +87 -0
- data/samples/FigureSamples/basic/SimpleSample-trace.cdl +50 -0
- data/samples/FigureSamples/basic/SimpleSample.cde +91 -0
- data/samples/FigureSamples/basic/SimpleSample.cdl +47 -0
- data/samples/FigureSamples/basic/basic.cde +93 -0
- data/samples/FigureSamples/basic/basic.cdl +46 -0
- data/samples/FigureSamples/basic/basic.png +0 -0
- data/samples/FigureSamples/callback/callback.cde +130 -0
- data/samples/FigureSamples/callback/callback.cdl +29 -0
- data/samples/FigureSamples/callback/callback.png +0 -0
- data/samples/FigureSamples/carray/carray.cde +144 -0
- data/samples/FigureSamples/carray/carray.cdl +38 -0
- data/samples/FigureSamples/carray/carray.png +0 -0
- data/samples/FigureSamples/cearray/cearray.cde +314 -0
- data/samples/FigureSamples/cearray/cearray.cdl +60 -0
- data/samples/FigureSamples/cearray/cearray.png +0 -0
- data/samples/FigureSamples/composite/composite-internal.png +0 -0
- data/samples/FigureSamples/composite/composite.cde +216 -0
- data/samples/FigureSamples/composite/composite.cdl +95 -0
- data/samples/FigureSamples/composite/composite.png +0 -0
- data/samples/FigureSamples/earray/earray.cde +142 -0
- data/samples/FigureSamples/earray/earray.cdl +38 -0
- data/samples/FigureSamples/earray/earray.png +0 -0
- data/samples/FigureSamples/join/Makefile +87 -0
- data/samples/FigureSamples/join/join.cde +132 -0
- data/samples/FigureSamples/join/join.cdl +40 -0
- data/samples/FigureSamples/join/join.png +0 -0
- data/samples/FigureSamples/relay/Makefile +99 -0
- data/samples/FigureSamples/relay/relay-internal.png +0 -0
- data/samples/FigureSamples/relay/relay.cde +284 -0
- data/samples/FigureSamples/relay/relay.cdl +52 -0
- data/samples/FigureSamples/relay/relay.png +0 -0
- data/samples/FigureSamples/rpc/Makefile +123 -0
- data/samples/FigureSamples/rpc/rpc-expand.png +0 -0
- data/samples/FigureSamples/rpc/rpc.cde +245 -0
- data/samples/FigureSamples/rpc/rpc.png +0 -0
- data/samples/FigureSamples/rpc/rpc_sample.cdl +53 -0
- data/samples/SimpleSample/Makefile +25 -0
- data/samples/SimpleSample/SimpleSample/Makefile +86 -0
- data/samples/SimpleSample/SimpleSample/Makefile-trace +91 -0
- data/samples/SimpleSample/SimpleSample/README.txt +106 -0
- data/samples/SimpleSample/SimpleSample/SimpleSample-trace.cdl +50 -0
- data/samples/SimpleSample/SimpleSample/SimpleSample.cdl +45 -0
- data/samples/SimpleSample/SimpleSample/src/tSample.c +77 -0
- data/samples/SimpleSample/SimpleSample/src/tSimple.c +48 -0
- data/samples/SimpleSample/SimpleSample/src/tecs-types.h +27 -0
- data/samples/SimpleSample/SimpleSampleOpaqueRPC/Makefile +51 -0
- data/samples/SimpleSample/SimpleSampleOpaqueRPC/Makefile-trace +91 -0
- data/samples/SimpleSample/SimpleSampleOpaqueRPC/README.txt +106 -0
- data/samples/SimpleSample/SimpleSampleOpaqueRPC/SimpleSample-trace.cdl +80 -0
- data/samples/SimpleSample/SimpleSampleOpaqueRPC/SimpleSample.cdl +77 -0
- data/samples/SimpleSample/SimpleSampleOpaqueRPC/rSample/Makefile +112 -0
- data/samples/SimpleSample/SimpleSampleOpaqueRPC/rSimple/Makefile +109 -0
- data/samples/SimpleSample/SimpleSampleOpaqueRPC/src/tSample.c +80 -0
- data/samples/SimpleSample/SimpleSampleOpaqueRPC/src/tSimple.c +47 -0
- data/samples/SimpleSample/SimpleSampleOpaqueRPC/src/tTaskMain.c +66 -0
- data/samples/SimpleSample/SimpleSampleOpaqueRPC/src/tecs-types.h +27 -0
- data/samples/SimpleSample/SimpleSampleTransparentRPC/Makefile +125 -0
- data/samples/SimpleSample/SimpleSampleTransparentRPC/Makefile-trace +130 -0
- data/samples/SimpleSample/SimpleSampleTransparentRPC/SimpleSample-trace.cdl +54 -0
- data/samples/SimpleSample/SimpleSampleTransparentRPC/SimpleSample.cdl +53 -0
- data/samples/SimpleSample/SimpleSampleTransparentRPC/src/tSample.c +80 -0
- data/samples/SimpleSample/SimpleSampleTransparentRPC/src/tSimple.c +54 -0
- data/tecscde.gemspec +41 -0
- metadata +353 -0
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
#
|
|
2
|
+
# TECS Generator
|
|
3
|
+
# Generator for TOPPERS Embedded Component System
|
|
4
|
+
#
|
|
5
|
+
# Copyright (C) 2008-2018 by TOPPERS Project
|
|
6
|
+
#--
|
|
7
|
+
# 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
|
|
8
|
+
# ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
|
|
9
|
+
# 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
|
|
10
|
+
# (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
|
|
11
|
+
# 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
|
|
12
|
+
# スコード中に含まれていること.
|
|
13
|
+
# (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
|
|
14
|
+
# 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
|
|
15
|
+
# 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
|
|
16
|
+
# の無保証規定を掲載すること.
|
|
17
|
+
# (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
|
|
18
|
+
# 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
|
|
19
|
+
# と.
|
|
20
|
+
# (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
|
|
21
|
+
# 作権表示,この利用条件および下記の無保証規定を掲載すること.
|
|
22
|
+
# (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
|
|
23
|
+
# 報告すること.
|
|
24
|
+
# (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
|
|
25
|
+
# 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
|
|
26
|
+
# また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
|
|
27
|
+
# 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
|
|
28
|
+
# 免責すること.
|
|
29
|
+
#
|
|
30
|
+
# 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
|
|
31
|
+
# よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
|
|
32
|
+
# に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
|
|
33
|
+
# アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
|
|
34
|
+
# の責任を負わない.
|
|
35
|
+
#
|
|
36
|
+
#
|
|
37
|
+
# $Id: HRPKernelObjectPlugin.rb 2952 2018-05-07 10:19:07Z okuma-top $
|
|
38
|
+
#++
|
|
39
|
+
|
|
40
|
+
#== celltype プラグインの共通の親クラス
|
|
41
|
+
class HRPKernelObjectPlugin < CelltypePlugin
|
|
42
|
+
# @@obj_hash = {}
|
|
43
|
+
|
|
44
|
+
# @celltype:: Celltype
|
|
45
|
+
# @option:: String :オプション文字列
|
|
46
|
+
def initialize(celltype, option)
|
|
47
|
+
super
|
|
48
|
+
#
|
|
49
|
+
# それぞれのカーネルオブジェクトを解析対象セルタイプに追加
|
|
50
|
+
# 目的:
|
|
51
|
+
# - カーネルオブジェクトのセルをメモリ保護対象外とする
|
|
52
|
+
# - カーネルオブジェクト本体の管理はTECSでなくOSで実施するため
|
|
53
|
+
# - カーネルオブジェクトのセルへのアクセスを直接関数呼出し
|
|
54
|
+
# とする
|
|
55
|
+
# - システムサービス呼出しはOSが提供するため
|
|
56
|
+
HRPKernelObjectPlugin.set_celltype(celltype)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
#=== HRPKernelObjectPlugin#print_cfg_cre
|
|
60
|
+
# 各種カーネルオブジェクトのCRE_*の出力
|
|
61
|
+
# file:: FILE: 出力先ファイル
|
|
62
|
+
# val :: string: カーネルオブジェクトの属性の解析結果
|
|
63
|
+
# tab :: string: インデント用のtab
|
|
64
|
+
def print_cfg_cre(file, cell, val, tab)
|
|
65
|
+
raise "called virtual method print_cfg_cre in #{@celltype.get_name} plugin"
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
#=== HRPKernelObjectPlugin#print_cfg_sac
|
|
69
|
+
# 各種カーネルオブジェクトのSAC_*の出力
|
|
70
|
+
# file:: FILE: 出力先ファイル
|
|
71
|
+
# val :: string: カーネルオブジェクトの属性の解析結果
|
|
72
|
+
# acv :: string: アクセスベクタ
|
|
73
|
+
def print_cfg_sac(file, val, acv)
|
|
74
|
+
raise "called virtual method print_cfg_sac in #{@celltype.get_name} plugin"
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
#
|
|
78
|
+
# セルタイププラグインの本体メソッド
|
|
79
|
+
# - 静的APIの生成
|
|
80
|
+
# file:: FILE: 出力先ファイル
|
|
81
|
+
#
|
|
82
|
+
def gen_factory(file)
|
|
83
|
+
dbgPrint "===== begin #{@celltype.get_name} plugin =====\n"
|
|
84
|
+
|
|
85
|
+
#
|
|
86
|
+
# 対象となるすべてのセルについて、受け口に結合されている
|
|
87
|
+
# セルの所属ドメインを解析
|
|
88
|
+
# - 生成すべきcfgファイル名を取得するために必要
|
|
89
|
+
#
|
|
90
|
+
if !HRPKernelObjectPlugin.isChecked
|
|
91
|
+
HRPKernelObjectPlugin.check_referenced_cells
|
|
92
|
+
else
|
|
93
|
+
dbgPrint "***** already checked\n"
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
# 追記するために AppFile を使う(文字コード変換されない)
|
|
97
|
+
file2 = AppFile.open("#{$gen}/tecsgen.cfg")
|
|
98
|
+
file2.print "\n/* Generated by #{self.class.name} */\n\n"
|
|
99
|
+
|
|
100
|
+
@celltype.get_cell_list.each {|cell|
|
|
101
|
+
if cell.is_generate?
|
|
102
|
+
dbgPrint "===== begin check my domain #{cell.get_name} =====\n"
|
|
103
|
+
#
|
|
104
|
+
# カーネルオブジェクトの属性を,valにコピー
|
|
105
|
+
#
|
|
106
|
+
val = {}
|
|
107
|
+
@celltype.get_attribute_list.each{|a|
|
|
108
|
+
# p a.get_name
|
|
109
|
+
if a.get_type.is_a?(ArrayType)
|
|
110
|
+
val[a.get_name] = []
|
|
111
|
+
if j = cell.get_join_list.get_item(a.get_name)
|
|
112
|
+
# セル生成時に初期化する場合
|
|
113
|
+
j.get_rhs.each {|elem|
|
|
114
|
+
val[a.get_name] << elem.to_s
|
|
115
|
+
}
|
|
116
|
+
elsif i = a.get_initializer
|
|
117
|
+
# セルタイプの初期化値を使う場合
|
|
118
|
+
i.each {|elem|
|
|
119
|
+
val[a.get_name] << elem.to_s
|
|
120
|
+
}
|
|
121
|
+
else
|
|
122
|
+
raise "attribute is not initialized"
|
|
123
|
+
end
|
|
124
|
+
else
|
|
125
|
+
if j = cell.get_join_list.get_item(a.get_name)
|
|
126
|
+
# セル生成時に初期化する場合
|
|
127
|
+
val[a.get_name] = j.get_rhs.to_s
|
|
128
|
+
elsif i = a.get_initializer
|
|
129
|
+
# セルタイプの初期化値を使う場合
|
|
130
|
+
val[a.get_name] = i.to_s
|
|
131
|
+
else
|
|
132
|
+
raise "attribute is not initialized"
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
}
|
|
136
|
+
# generate.rbを参考に
|
|
137
|
+
# $id$を置換
|
|
138
|
+
if val[:id].nil? != true
|
|
139
|
+
name_array = @celltype.get_name_array(cell)
|
|
140
|
+
val[:id] = @celltype.subst_name(val[:id], name_array)
|
|
141
|
+
end
|
|
142
|
+
# $cbp$の代わり
|
|
143
|
+
cell_domain_root = cell.get_region.get_domain_root
|
|
144
|
+
cell_domain_type = cell.get_region.get_domain_root.get_domain_type
|
|
145
|
+
|
|
146
|
+
# CRE_XXX/DEF_XXXの生成
|
|
147
|
+
if cell_domain_type.get_option.to_s != "OutOfDomain"
|
|
148
|
+
# 保護ドメインに属する場合
|
|
149
|
+
if !HRPKernelObjectPlugin.include_region(cell_domain_root.get_name.to_s)
|
|
150
|
+
# その保護ドメインの.cfgが生成されていない場合
|
|
151
|
+
HRPKernelObjectPlugin.set_region_list(cell_domain_root.get_name.to_s)
|
|
152
|
+
dbgPrint "~~~~~ #{cell_domain_root.get_name} is registered!\n"
|
|
153
|
+
|
|
154
|
+
# # if cell.get_region.get_param == :KERNEL_DOMAIN
|
|
155
|
+
# if cell_domain_type.get_option.to_s == "kernel"
|
|
156
|
+
# file2.print "KERNEL_DOMAIN{\n"
|
|
157
|
+
# else
|
|
158
|
+
# file2.print "DOMAIN(#{cell_domain_root.get_name.to_s}){\n"
|
|
159
|
+
# end
|
|
160
|
+
# file2.puts "\tINCLUDE(\"#{$gen}/tecsgen_#{cell_domain_root.get_name.to_s}.cfg\");"
|
|
161
|
+
# file2.puts "}\n"
|
|
162
|
+
else
|
|
163
|
+
dbgPrint "~~~~~ #{cell.get_region.get_namespace_path} is included in"
|
|
164
|
+
# p @@region_list
|
|
165
|
+
end
|
|
166
|
+
file3 = AppFile.open("#{$gen}/tecsgen_#{cell_domain_root.get_global_name}.cfg")
|
|
167
|
+
print_cfg_cre(file3, cell, val, "")
|
|
168
|
+
file3.close
|
|
169
|
+
else
|
|
170
|
+
# 無所属の場合
|
|
171
|
+
dbgPrint "~~~~~ #{cell_domain_root.get_namespace_path} is OutOfDomain\n"
|
|
172
|
+
# print "~~~~~ #{cell_domain_root.get_namespace_path} is OutOfDomain\n"
|
|
173
|
+
# p cell_domain_root.get_name
|
|
174
|
+
if cell_domain_root.get_name == "::"
|
|
175
|
+
print_cfg_cre(file2, cell, val, "")
|
|
176
|
+
else
|
|
177
|
+
# if !HRPKernelObjectPlugin.include_region(cell_domain_root.get_name.to_s)
|
|
178
|
+
# # その保護ドメインの.cfgが生成されていない場合
|
|
179
|
+
# HRPKernelObjectPlugin.set_region_list(cell_domain_root.get_name.to_s)
|
|
180
|
+
# file2.puts "INCLUDE(\"#{$gen}/tecsgen_#{cell_domain_root.get_name.to_s}.cfg\");\n"
|
|
181
|
+
# end
|
|
182
|
+
file3 = AppFile.open("#{$gen}/tecsgen_#{cell_domain_root.get_name}.cfg")
|
|
183
|
+
print_cfg_cre(file3, cell, val, "")
|
|
184
|
+
file3.close
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
dbgPrint "===== end check my domain #{cell.get_name} =====\n"
|
|
190
|
+
|
|
191
|
+
#
|
|
192
|
+
# SAC_XXXの生成
|
|
193
|
+
#
|
|
194
|
+
if !val[:accessPattern1].nil?
|
|
195
|
+
dbgPrint "===== begin check regions #{cell.get_name} =====\n"
|
|
196
|
+
i = 0
|
|
197
|
+
acv = { \
|
|
198
|
+
:accessPattern1 => val[:accessPattern1], \
|
|
199
|
+
:accessPattern2 => val[:accessPattern2], \
|
|
200
|
+
:accessPattern3 => val[:accessPattern3], \
|
|
201
|
+
:accessPattern4 => val[:accessPattern4] \
|
|
202
|
+
}
|
|
203
|
+
acv_tmp = []
|
|
204
|
+
domain_roots = HRPPlugin.get_inter_domain_join_roots cell
|
|
205
|
+
# 結合先セルのドメインを加える
|
|
206
|
+
if cell_domain_type.get_kind != :OutOfDomain
|
|
207
|
+
domain_roots << cell_domain_root
|
|
208
|
+
end
|
|
209
|
+
domain_roots.each{|dr|
|
|
210
|
+
case dr.get_domain_type.get_kind
|
|
211
|
+
when :user
|
|
212
|
+
acv_tmp << "TACP(#{dr.get_name})"
|
|
213
|
+
when :kernel
|
|
214
|
+
acv_tmp << "TACP_KERNEL"
|
|
215
|
+
when :OutOfDomain
|
|
216
|
+
if cell_domain_type.get_kind == :OutOfDomain
|
|
217
|
+
# 呼び元も、呼び先も OutOfDomain の場合
|
|
218
|
+
acv_tmp << "TACP_SHARED"
|
|
219
|
+
end
|
|
220
|
+
end
|
|
221
|
+
}
|
|
222
|
+
acv_tmp.uniq!
|
|
223
|
+
if acv_tmp.length == 0
|
|
224
|
+
# 呼び先セルが無所属かつ、呼び元も無所属のみ、または結合無しの場合
|
|
225
|
+
acv_tmp = ["TACP_SHARED"]
|
|
226
|
+
end
|
|
227
|
+
b_info = false
|
|
228
|
+
b_warn = false
|
|
229
|
+
acv.each {|key, acp|
|
|
230
|
+
if !acp.nil?
|
|
231
|
+
if acp != "OMIT"
|
|
232
|
+
elsif cell_domain_type.get_kind != :OutOfDomain
|
|
233
|
+
# p "UserDomainCell or KernelDomainCell"
|
|
234
|
+
domain_roots = HRPPlugin.get_inter_domain_join_roots cell
|
|
235
|
+
domain_roots.each{|dr|
|
|
236
|
+
#
|
|
237
|
+
case dr.get_domain_type.get_kind
|
|
238
|
+
when :kernel
|
|
239
|
+
when :user
|
|
240
|
+
if dr.get_namespace_path != cell.get_region.get_domain_root.get_namespace_path
|
|
241
|
+
# 他のユーザードメインからの結合
|
|
242
|
+
if b_warn == false
|
|
243
|
+
cdl_error("HRP9999 '$1': kernel object joined from other user domain. kernel object joined from multi-user-domain must be placed out of domain", cell.get_name)
|
|
244
|
+
b_warn = true
|
|
245
|
+
end
|
|
246
|
+
end
|
|
247
|
+
when :OutOfDomain
|
|
248
|
+
if b_info == false
|
|
249
|
+
# 無所属からの結合
|
|
250
|
+
# cdl_error( "HRP9999 kernel object joined from out of domain" )
|
|
251
|
+
if cell_domain_type.get_kind == :OutOfDomain
|
|
252
|
+
# この情報は、不要と判断する (無所属から無所属へ結合があると、アクセス許可ベクタが設定されない)
|
|
253
|
+
# cdl_info2( cell.get_locale, "HRP9999 '$1': kernel object joined from out of domain, access vector is not set", cell.get_name )
|
|
254
|
+
b_info = true
|
|
255
|
+
end
|
|
256
|
+
end
|
|
257
|
+
else
|
|
258
|
+
raise "unknown domain kind"
|
|
259
|
+
end
|
|
260
|
+
}
|
|
261
|
+
# acv[key] = "TACP(#{cell_domain_root.get_name.to_s})"
|
|
262
|
+
else
|
|
263
|
+
# p "OutOfDomainCell"
|
|
264
|
+
# 無所属のセル
|
|
265
|
+
# 結合元ドメインに許可する
|
|
266
|
+
# 結合元に無所属のセルがあると、TACP_SHARED が設定される. フロー解析してドメインを特定できるのが、あるべき仕様
|
|
267
|
+
end
|
|
268
|
+
if acp == "OMIT"
|
|
269
|
+
acv[key] = acv_tmp.join("|")
|
|
270
|
+
end
|
|
271
|
+
end
|
|
272
|
+
}
|
|
273
|
+
# 各種SACの生成
|
|
274
|
+
domainOption = cell_domain_type.get_option
|
|
275
|
+
# p "domain_root ", cell.get_region.get_domain_root.get_name
|
|
276
|
+
if domainOption != "OutOfDomain" || cell.get_region.get_domain_root.get_name != "::"
|
|
277
|
+
# 保護ドメインに属する場合
|
|
278
|
+
file3 = AppFile.open("#{$gen}/tecsgen_#{cell.get_region.get_name}.cfg")
|
|
279
|
+
print_cfg_sac(file3, val, acv)
|
|
280
|
+
file3.close
|
|
281
|
+
else
|
|
282
|
+
# 無所属の場合
|
|
283
|
+
print_cfg_sac(file2, val, acv)
|
|
284
|
+
end
|
|
285
|
+
|
|
286
|
+
dbgPrint "===== end check regions #{cell.get_name} =====\n"
|
|
287
|
+
end
|
|
288
|
+
end
|
|
289
|
+
}
|
|
290
|
+
dbgPrint "===== end #{@celltype.get_name} plugin =====\n"
|
|
291
|
+
file2.close
|
|
292
|
+
end
|
|
293
|
+
|
|
294
|
+
# カーネルオブジェクトセルタイプの管理
|
|
295
|
+
# HRPKernelObjectPluginクラスに対してメソッド呼出しを行うことを想定
|
|
296
|
+
@@checked = false
|
|
297
|
+
@@celltype_list = []
|
|
298
|
+
@@region_list = []
|
|
299
|
+
|
|
300
|
+
def self.isChecked
|
|
301
|
+
return @@checked
|
|
302
|
+
end
|
|
303
|
+
|
|
304
|
+
def self.check_referenced_cells
|
|
305
|
+
dbgPrint "===== begin check registered celltype =====\n"
|
|
306
|
+
self.get_celltype_list.each {|ct|
|
|
307
|
+
dbgPrint(ct.get_name.to_s + "\n")
|
|
308
|
+
}
|
|
309
|
+
dbgPrint "===== end check registered celltype =====\n"
|
|
310
|
+
|
|
311
|
+
@@checked = true
|
|
312
|
+
end
|
|
313
|
+
|
|
314
|
+
def self.set_celltype(celltype)
|
|
315
|
+
@@celltype_list << celltype
|
|
316
|
+
end
|
|
317
|
+
|
|
318
|
+
def self.get_celltype_list
|
|
319
|
+
return @@celltype_list
|
|
320
|
+
end
|
|
321
|
+
|
|
322
|
+
def self.set_region_list(region)
|
|
323
|
+
@@region_list << region
|
|
324
|
+
end
|
|
325
|
+
|
|
326
|
+
def self.include_region(region)
|
|
327
|
+
return @@region_list.include?(region)
|
|
328
|
+
end
|
|
329
|
+
|
|
330
|
+
def self.include_celltype?(celltype)
|
|
331
|
+
return @@celltype_list.include?(celltype)
|
|
332
|
+
end
|
|
333
|
+
end
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
#
|
|
2
|
+
# TECS Generator
|
|
3
|
+
# Generator for TOPPERS Embedded Component System
|
|
4
|
+
#
|
|
5
|
+
# Copyright (C) 2008-2018 by TOPPERS Project
|
|
6
|
+
#--
|
|
7
|
+
# 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
|
|
8
|
+
# ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
|
|
9
|
+
# 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
|
|
10
|
+
# (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
|
|
11
|
+
# 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
|
|
12
|
+
# スコード中に含まれていること.
|
|
13
|
+
# (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
|
|
14
|
+
# 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
|
|
15
|
+
# 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
|
|
16
|
+
# の無保証規定を掲載すること.
|
|
17
|
+
# (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
|
|
18
|
+
# 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
|
|
19
|
+
# と.
|
|
20
|
+
# (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
|
|
21
|
+
# 作権表示,この利用条件および下記の無保証規定を掲載すること.
|
|
22
|
+
# (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
|
|
23
|
+
# 報告すること.
|
|
24
|
+
# (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
|
|
25
|
+
# 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
|
|
26
|
+
# また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
|
|
27
|
+
# 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
|
|
28
|
+
# 免責すること.
|
|
29
|
+
#
|
|
30
|
+
# 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
|
|
31
|
+
# よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
|
|
32
|
+
# に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
|
|
33
|
+
# アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
|
|
34
|
+
# の責任を負わない.
|
|
35
|
+
#
|
|
36
|
+
# $Id: HRPObjectPlugin.rb 2952 2018-05-07 10:19:07Z okuma-top $
|
|
37
|
+
#++
|
|
38
|
+
|
|
39
|
+
require_tecsgen_lib "HRPKernelObjectPlugin.rb"
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
class HRPObjectPlugin < HRPKernelObjectPlugin
|
|
43
|
+
@@api = {
|
|
44
|
+
"SEMAPHORE" => ["SEM", :id, :attribute, :initialCount, :maxCount],
|
|
45
|
+
"EVENTFLAG" => ["FLG", :id, :attribute, :flagPattern],
|
|
46
|
+
"DATAQUEUE" => ["DTQ", :id, :attribute, :dataCount, :dataqueueManagementBuffer],
|
|
47
|
+
"PRIORITY_DATAQUEUE" => ["PDQ", :id, :attribute, :dataCount, :maxDataPriority, :priorityDataqueueManagementBuffer],
|
|
48
|
+
"FIXED_SIZE_MEMORYPOOL" => ["MPF", :id, :attribute, :blockCount, :blockSize, :memoryPool, :memoryPoolManagementBuffer],
|
|
49
|
+
"KERNEL" => ["SYS"],
|
|
50
|
+
"MESSAGE_BUFFER" => ["MBF", :id, :attribute, :maxMessageSize, :bufferSize, :mbfmb],
|
|
51
|
+
"MUTEX" => ["MTX", :id, :attribute, :ceilingPriority]
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
#=== HRPObjectPlugin#print_cfg_cre
|
|
55
|
+
# CRE_XXXの出力
|
|
56
|
+
# file:: FILE: 出力先ファイル
|
|
57
|
+
# val :: string: カーネルオブジェクトの属性の解析結果
|
|
58
|
+
# tab :: string: インデント用のtab
|
|
59
|
+
def print_cfg_cre(file, cell, val, tab)
|
|
60
|
+
if @@api.has_key?(@plugin_arg_str) == false
|
|
61
|
+
raise "#{@plugin_arg_str} is unknown"
|
|
62
|
+
elsif @plugin_arg_str != "KERNEL"
|
|
63
|
+
arg_list = []
|
|
64
|
+
params = @@api[@plugin_arg_str]
|
|
65
|
+
if @plugin_arg_str == "MUTEX" && (val[:attribute] =~ /\bTA_CEILING\b/).nil?
|
|
66
|
+
slice_end = -2 # :ceilingPriority を外す
|
|
67
|
+
else
|
|
68
|
+
slice_end = -1
|
|
69
|
+
end
|
|
70
|
+
# p @plugin_arg_str, slice_end, val[:attribute], (val[:attribute] =~ /\bTA_CEILING\b/)
|
|
71
|
+
params.slice(2..slice_end).each {|attr|
|
|
72
|
+
arg_list << val[attr].to_s
|
|
73
|
+
}
|
|
74
|
+
file.print tab
|
|
75
|
+
file.puts "CRE_#{@@api[@plugin_arg_str].at(0)}(#{val[:id]}, { #{arg_list.join(", ")} });"
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
#=== HRPObjectPlugin#print_cfg_sac
|
|
80
|
+
# SAC_XXXの出力
|
|
81
|
+
# file:: FILE: 出力先ファイル
|
|
82
|
+
# val :: string: カーネルオブジェクトの属性の解析結果
|
|
83
|
+
# acv :: string: アクセスベクタ
|
|
84
|
+
def print_cfg_sac(file, val, acv)
|
|
85
|
+
if @@api.has_key?(@plugin_arg_str) == false
|
|
86
|
+
raise "#{@plugin_arg_str} is unknown"
|
|
87
|
+
elsif @plugin_arg_str != "KERNEL"
|
|
88
|
+
file.puts "SAC_#{@@api[@plugin_arg_str].at(0)}(#{val[:id]}, { #{acv[:accessPattern1]}, #{acv[:accessPattern2]}, #{acv[:accessPattern3]}, #{acv[:accessPattern4]} });"
|
|
89
|
+
else
|
|
90
|
+
file.puts "SAC_#{@@api[@plugin_arg_str].at(0)}({ #{acv[:accessPattern1]}, #{acv[:accessPattern2]}, #{acv[:accessPattern3]}, #{acv[:accessPattern4]} });"
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
#
|
|
2
|
+
# TECS Generator
|
|
3
|
+
# Generator for TOPPERS Embedded Component System
|
|
4
|
+
#
|
|
5
|
+
# Copyright (C) 2014-2018 by TOPPERS Project
|
|
6
|
+
#--
|
|
7
|
+
# 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
|
|
8
|
+
# ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
|
|
9
|
+
# 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
|
|
10
|
+
# (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
|
|
11
|
+
# 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
|
|
12
|
+
# スコード中に含まれていること.
|
|
13
|
+
# (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
|
|
14
|
+
# 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
|
|
15
|
+
# 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
|
|
16
|
+
# の無保証規定を掲載すること.
|
|
17
|
+
# (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
|
|
18
|
+
# 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
|
|
19
|
+
# と.
|
|
20
|
+
# (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
|
|
21
|
+
# 作権表示,この利用条件および下記の無保証規定を掲載すること.
|
|
22
|
+
# (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
|
|
23
|
+
# 報告すること.
|
|
24
|
+
# (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
|
|
25
|
+
# 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
|
|
26
|
+
# また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
|
|
27
|
+
# 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
|
|
28
|
+
# 免責すること.
|
|
29
|
+
#
|
|
30
|
+
# 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
|
|
31
|
+
# よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
|
|
32
|
+
# に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
|
|
33
|
+
# アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
|
|
34
|
+
# の責任を負わない.
|
|
35
|
+
#
|
|
36
|
+
# $Id: HRPPlugin.rb 2952 2018-05-07 10:19:07Z okuma-top $
|
|
37
|
+
#++
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
require_tecsgen_lib "HRPKernelObjectManager.rb"
|
|
41
|
+
#
|
|
42
|
+
# 各メソッドの役割りは、DomainPlugin.rb を参照のこと
|
|
43
|
+
# HRPカーネル用ドメインプラグイン
|
|
44
|
+
class HRPPlugin < DomainPlugin
|
|
45
|
+
|
|
46
|
+
def initialize(region, name, option)
|
|
47
|
+
super
|
|
48
|
+
dbgPrint "HRPPlugin: initialize: region=#{region.get_name}, domainName=#{name}, option=#{option}\n"
|
|
49
|
+
@region = region
|
|
50
|
+
@name = name
|
|
51
|
+
case option
|
|
52
|
+
when "kernel", "user", "OutOfDomain"
|
|
53
|
+
# OK
|
|
54
|
+
@option = option
|
|
55
|
+
else
|
|
56
|
+
cdl_error("HRPPlugin: '$1' is unacceptable domain kind, specify 'kernel' or 'user'", option)
|
|
57
|
+
@option = "kernel" # とりあえず kernel を設定しておく
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def add_through_plugin(join, current_region, next_region, through_type)
|
|
62
|
+
# join.get_owner:Cell 左辺のセル
|
|
63
|
+
# join.get_definition:Port 呼び口
|
|
64
|
+
# join.get_subscript:Integer or nil 呼び口配列の添数 (Join::@subscript の説明参照)
|
|
65
|
+
# join.get_cell:Cell 右辺のセル
|
|
66
|
+
# join.get_port_name:Symbol 受け口
|
|
67
|
+
# get_rhs_subscript:Integer or nil 受け口配列の添数 (Join::@rhs_subscript の説明参照)
|
|
68
|
+
# return []
|
|
69
|
+
dbgPrint "MyDomainPlugin: add_through_plugin: #{current_region.get_name}=>#{next_region.get_name}, #{join.get_owner.get_name}.#{join.get_definition.get_name}=>#{join.get_cell.get_name}.#{join.get_port_name}, #{through_type}\n"
|
|
70
|
+
|
|
71
|
+
# puts "=====Join Check Start====="
|
|
72
|
+
# puts "caller: #{join.get_owner.get_name.to_s}, callee: #{join.get_cell.get_name.to_s}"
|
|
73
|
+
# puts "=====Join Check param====="
|
|
74
|
+
current_domain = current_region.get_domain_root.get_domain_type
|
|
75
|
+
next_domain = next_region.get_domain_root.get_domain_type
|
|
76
|
+
# puts current_domain.get_option.to_s
|
|
77
|
+
# if !next_domain.nil?
|
|
78
|
+
# puts next_domain.get_option.to_s
|
|
79
|
+
# else
|
|
80
|
+
# puts "next domain is nil!"
|
|
81
|
+
# end
|
|
82
|
+
|
|
83
|
+
HRPPlugin.add_inter_domain_join_set join
|
|
84
|
+
# p join.get_cell.get_name
|
|
85
|
+
# p join.get_cell.get_real_celltype(join.get_rhs_port1).get_name
|
|
86
|
+
# if HRPKernelObjectManager.include_celltype?(join.get_cell.get_celltype.get_global_name) #oyama: get_name => get_global_name
|
|
87
|
+
if HRPKernelObjectManager.include_celltype?(join.
|
|
88
|
+
get_cell.
|
|
89
|
+
get_real_celltype(join.get_rhs_port1).
|
|
90
|
+
get_global_name) # oyama: get_name => get_global_name
|
|
91
|
+
# 結合先がカーネルオブジェクトセル
|
|
92
|
+
# @plugin_body = HRP2SVCPlugin.new(cell_name, plugin_arg, next_cell, next_cell_port_name, signature, celltype, caller_cell)
|
|
93
|
+
# 何もしないthrough
|
|
94
|
+
# puts "***** #{join.get_cell.get_celltype.get_name} is kernel object"
|
|
95
|
+
return []
|
|
96
|
+
# return [ :HRP2SVCPlugin, "channelCelltype=tMessagebufferChannel,noClientSemaphore=true" ]
|
|
97
|
+
# elsif @end_region.is_root?
|
|
98
|
+
# elsif next_region.get_option == OutOfDomain
|
|
99
|
+
# elsif next_domain.nil?
|
|
100
|
+
elsif next_domain.get_option.to_s == "OutOfDomain"
|
|
101
|
+
# # 結合先が無所属
|
|
102
|
+
# # 何もしないthrough
|
|
103
|
+
# # @plugin_body = HRP2SVCPlugin.new(cell_name, plugin_arg, next_cell, next_cell_port_name, signature, celltype, caller_cell)
|
|
104
|
+
# puts "***** nil"
|
|
105
|
+
return []
|
|
106
|
+
# elsif @start_region.get_param != :KERNEL_DOMAIN && @end_region.get_param == :KERNEL_DOMAIN
|
|
107
|
+
elsif current_domain.get_option.to_s != "kernel" && next_domain.get_option.to_s == "kernel"
|
|
108
|
+
# ユーザドメインからカーネルドメインへの結合
|
|
109
|
+
# @plugin_body = HRP2SVCPlugin.new(cell_name, plugin_arg, next_cell, next_cell_port_name, signature, celltype, caller_cell)
|
|
110
|
+
# puts "***** svc"
|
|
111
|
+
return [:HRPSVCPlugin, ""]
|
|
112
|
+
elsif current_domain != next_domain
|
|
113
|
+
# 別のユーザドメインへの結合
|
|
114
|
+
# @plugin_body = HRP2RPCPlugin.new(cell_name, plugin_arg, next_cell, next_cell_port_name, signature, celltype, caller_cell)
|
|
115
|
+
# puts "***** rpc"
|
|
116
|
+
# return [ :HRPRPCPlugin, "channelCelltype=tMessagebufferChannel,noClientSemaphore=true" ]
|
|
117
|
+
# puts "HRPPlugin:RPC:PPAllocatorSize=256"
|
|
118
|
+
return [:HRPRPCPlugin, "noClientSemaphore=false,PPAllocatorSize=256"]
|
|
119
|
+
else
|
|
120
|
+
# その他
|
|
121
|
+
# 何もしないthrough
|
|
122
|
+
# @plugin_body = HRP2SVCPlugin.new(cell_name, plugin_arg, next_cell, next_cell_port_name, signature, celltype, caller_cell)
|
|
123
|
+
dbgPrint "warning: at HRP Join Check"
|
|
124
|
+
return nil
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
# puts "=====Join Check End====="
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
def joinable?(current_region, next_region, through_type)
|
|
131
|
+
dbgPrint "MyDomainPlugin: joinable? from #{current_region.get_name} to #{next_region.get_name} (#{through_type})\n"
|
|
132
|
+
return true
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
#== ドメイン種別を返す
|
|
136
|
+
# return::Symbol :kernel, :user, :OutOfDomain
|
|
137
|
+
def get_kind
|
|
138
|
+
return @option.to_sym
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
def self.gen_post_code(file)
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
# ATT_MODを生成済みかどうか # 2017.8.27
|
|
145
|
+
@@generate_memory_module = false
|
|
146
|
+
|
|
147
|
+
@@include_extsvc_fncd = false # 17.07.26 暫定
|
|
148
|
+
#
|
|
149
|
+
# ATT_MODの生成
|
|
150
|
+
# gen_factory実行時には,すべてのセルタイププラグインを生成済みのはずなので,
|
|
151
|
+
# カーネルAPIコードのメモリ保護を省略できる.
|
|
152
|
+
#
|
|
153
|
+
def gen_factory
|
|
154
|
+
super
|
|
155
|
+
|
|
156
|
+
if @@include_extsvc_fncd == false
|
|
157
|
+
file = AppFile.open("#{$gen}/tecsgen.cfg")
|
|
158
|
+
file.print "/* HRPPlugin 001 */\n"
|
|
159
|
+
file.print "#include \"extsvc_fncode.h\"\n" ## 2017.7.26
|
|
160
|
+
file.close
|
|
161
|
+
@@include_extsvc_fncd = true
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
if @@generate_memory_module == false
|
|
165
|
+
|
|
166
|
+
# INCLUDE を出力
|
|
167
|
+
# すべてのドメインに対する cfg を先に生成しておく
|
|
168
|
+
# もし、ドメインに属するカーネルオブジェクトも、モジュールもない場合でも、cfg が出力される
|
|
169
|
+
regions = DomainType.get_domain_regions[:HRP]
|
|
170
|
+
file = AppFile.open("#{$gen}/tecsgen.cfg")
|
|
171
|
+
file.print "/* HRPPlugin 002 */\n"
|
|
172
|
+
regions.each{|region|
|
|
173
|
+
if !region.is_root?
|
|
174
|
+
nsp = region.get_global_name.to_s
|
|
175
|
+
file2 = AppFile.open("#{$gen}/tecsgen_#{nsp}.cfg")
|
|
176
|
+
file2.close
|
|
177
|
+
case region.get_domain_type.get_kind
|
|
178
|
+
when :kernel
|
|
179
|
+
pre = "KERNEL_DOMAIN{\n "
|
|
180
|
+
post = "}\n"
|
|
181
|
+
when :user
|
|
182
|
+
pre = "DOMAIN(#{region.get_name}){\n "
|
|
183
|
+
post = "}\n"
|
|
184
|
+
when :OutOfDomain
|
|
185
|
+
pre = ""
|
|
186
|
+
post = "\n"
|
|
187
|
+
end
|
|
188
|
+
file.puts "#{pre}INCLUDE(\"#{$gen}/tecsgen_#{nsp}.cfg\");\n#{post}"
|
|
189
|
+
end
|
|
190
|
+
}
|
|
191
|
+
file.print "/* HRPPlugin 002 end */\n\n"
|
|
192
|
+
file.close
|
|
193
|
+
|
|
194
|
+
check_celltype_list = []
|
|
195
|
+
|
|
196
|
+
#
|
|
197
|
+
# ATT_MODの生成
|
|
198
|
+
#
|
|
199
|
+
Cell.get_cell_list2.each {|cell|
|
|
200
|
+
# すべてのセルを走査してセルタイプをチェック
|
|
201
|
+
ct = cell.get_celltype
|
|
202
|
+
if ct.class == Celltype && check_celltype_list.include?(ct) == false
|
|
203
|
+
# チェック済みセルタイプに登録
|
|
204
|
+
check_celltype_list << ct
|
|
205
|
+
|
|
206
|
+
# 未チェックのセルタイプだった場合
|
|
207
|
+
# puts "check for ATT_MOD : #{ct.classget_global_name}"
|
|
208
|
+
# puts "check for ATT_MOD : #{ct.get_global_name}"
|
|
209
|
+
|
|
210
|
+
# カーネルAPIのコード,データはメモリ保護しない # HRP3 oyama delete by Takada's request
|
|
211
|
+
# next if HRPKernelObjectManager.include_celltype?( ct.get_name )
|
|
212
|
+
|
|
213
|
+
# 必要のないセルタイプのコード,データはメモリ保護しない
|
|
214
|
+
next if !ct.need_generate?
|
|
215
|
+
|
|
216
|
+
# HRPのドメインリージョンを取得
|
|
217
|
+
regions = ct.get_domain_roots
|
|
218
|
+
regions_hrp = regions[:HRP]
|
|
219
|
+
dbgPrint "HRP domain in #{ct.get_name}: "
|
|
220
|
+
regions_hrp.each {|reg|
|
|
221
|
+
dbgPrint reg.get_name
|
|
222
|
+
}
|
|
223
|
+
# puts ""
|
|
224
|
+
|
|
225
|
+
# セル管理ブロックとスケルトンのメモリ保護
|
|
226
|
+
# gen_celltype_names_domain 相当の処理
|
|
227
|
+
if regions_hrp.include?(Region.get_root) == false && regions_hrp.length > 1
|
|
228
|
+
# ドメインが複数で,OutOfDomainにセルが存在しないセルタイプの場合
|
|
229
|
+
# 共有のセル管理ブロックとスケルトンコードを登録する
|
|
230
|
+
file = AppFile.open("#{$gen}/tecsgen.cfg")
|
|
231
|
+
file.printf "%-60s/* HRPPlugin 003 */\n", "ATT_MOD(\"#{ct.get_global_name}_tecsgen.o\");"
|
|
232
|
+
file.close
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
regions_hrp.each {|reg|
|
|
236
|
+
if reg.is_root?
|
|
237
|
+
nsp = ""
|
|
238
|
+
else
|
|
239
|
+
nsp = "_#{reg.get_global_name}"
|
|
240
|
+
end
|
|
241
|
+
file = AppFile.open("#{$gen}/tecsgen#{nsp}.cfg")
|
|
242
|
+
file.printf "%-50s/* HRPPlugin 004 */\n", "ATT_MOD(\"#{ct.get_global_name}#{nsp}_tecsgen.o\");"
|
|
243
|
+
file.close
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
# セルタイプコードがない場合はスキップ
|
|
247
|
+
next if ct.is_all_entry_inline? && !ct.is_active?
|
|
248
|
+
|
|
249
|
+
# セルタイプコードのメモリ保護
|
|
250
|
+
# gen_celltype_names_domain2 相当の処理
|
|
251
|
+
if regions_hrp.include?(Region.get_root) == true || regions_hrp.length > 1
|
|
252
|
+
# OutOfDomainにセルが存在するセルタイプの場合
|
|
253
|
+
# または,複数のドメインにセルが存在するセルタイプの場合
|
|
254
|
+
# セルタイプコードを共有するように登録する
|
|
255
|
+
file = AppFile.open("#{$gen}/tecsgen.cfg")
|
|
256
|
+
else
|
|
257
|
+
# OutOfDomainでない単一のドメインにセルが存在するセルタイプの場合
|
|
258
|
+
# セルタイプコードを専有するように登録する
|
|
259
|
+
file = AppFile.open("#{$gen}/tecsgen_#{regions_hrp[0].get_global_name}.cfg")
|
|
260
|
+
end
|
|
261
|
+
|
|
262
|
+
file.printf "%-50s/* HRPPlugin 005 */\n", "ATT_MOD(\"#{ct.get_global_name}.o\");"
|
|
263
|
+
file.close
|
|
264
|
+
else
|
|
265
|
+
# 何もしない
|
|
266
|
+
end
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
@@generate_memory_module = true
|
|
270
|
+
else
|
|
271
|
+
# 何もしない
|
|
272
|
+
end
|
|
273
|
+
end
|
|
274
|
+
|
|
275
|
+
#----- Inter Domain Join Set -----#
|
|
276
|
+
@@inter_domain_join_set = {} # {entry_cell =>{domain_root=>count} } Hash of inter domain join
|
|
277
|
+
def self.add_inter_domain_join_set(join)
|
|
278
|
+
rhs_cell = join.get_cell
|
|
279
|
+
dbgPrint "--------- add_inter_domain:#{join.get_owner.get_namespace_path} => #{join.get_cell.get_namespace_path}-----\n"
|
|
280
|
+
domain_root = join.get_owner.get_region.get_domain_root # lhs cell's domain root
|
|
281
|
+
if @@inter_domain_join_set[rhs_cell].nil?
|
|
282
|
+
@@inter_domain_join_set[rhs_cell] = []
|
|
283
|
+
end
|
|
284
|
+
# 左辺のドメインルートを記録
|
|
285
|
+
@@inter_domain_join_set[rhs_cell] << join
|
|
286
|
+
end
|
|
287
|
+
|
|
288
|
+
def self.get_inter_domain_join_set(rhs_cell)
|
|
289
|
+
if @@inter_domain_join_set[rhs_cell]
|
|
290
|
+
@@inter_domain_join_set[rhs_cell].uniq!
|
|
291
|
+
else
|
|
292
|
+
@@inter_domain_join_set[rhs_cell] = []
|
|
293
|
+
end
|
|
294
|
+
return @@inter_domain_join_set[rhs_cell]
|
|
295
|
+
end
|
|
296
|
+
|
|
297
|
+
def self.get_inter_domain_join_roots(rhs_cell)
|
|
298
|
+
dbgPrint "--------- get_inter_domain #{rhs_cell.get_namespace_path} -----\n"
|
|
299
|
+
domain_roots = []
|
|
300
|
+
set = get_inter_domain_join_set rhs_cell
|
|
301
|
+
set.each{|join|
|
|
302
|
+
dbgPrint "--------- get_inter_domain:#{join.get_owner.get_namespace_path} => #{join.get_cell.get_namespace_path}-----\n"
|
|
303
|
+
# if join.get_owner.get_region.get_domain_root.get_domain_type.get_option == "user" then
|
|
304
|
+
domain_roots << join.get_owner.get_region.get_domain_root
|
|
305
|
+
# end
|
|
306
|
+
}
|
|
307
|
+
return domain_roots.uniq
|
|
308
|
+
end
|
|
309
|
+
|
|
310
|
+
def self.get_sac_str(cell)
|
|
311
|
+
domain_roots = self.get_inter_domain_join_roots cell
|
|
312
|
+
delim = ""
|
|
313
|
+
acv = ""
|
|
314
|
+
cell_domain_root = cell.get_region.get_domain_root
|
|
315
|
+
if cell_domain_root.get_domain_type.get_kind != :OutOfDomain
|
|
316
|
+
domain_roots << cell.get_region.get_domain_root # 結合先のドメインも含める
|
|
317
|
+
end
|
|
318
|
+
domain_roots.each{|dr|
|
|
319
|
+
case dr.get_domain_type.get_kind
|
|
320
|
+
when :kernel
|
|
321
|
+
acv += "#{delim}TACP_KERNEL"
|
|
322
|
+
delim = "|"
|
|
323
|
+
when :user
|
|
324
|
+
acv += "#{delim}TACP(#{dr.get_name})"
|
|
325
|
+
delim = "|"
|
|
326
|
+
if cell_domain_root.get_domain_type.get_kind != :OutOfDomain &&
|
|
327
|
+
dr.get_namespace_path != cell_domain_root.get_namespace_path
|
|
328
|
+
cdl_error("HRP9999 '$1': kernel object joined from other user domain. kernel object joined from multi-user-domain must be placed out of domain", cell.get_name)
|
|
329
|
+
end
|
|
330
|
+
when :OutOfDomain
|
|
331
|
+
if cell_domain_root.get_domain_type.get_kind == :OutOfDomain
|
|
332
|
+
acv += "#{delim}TACP_SHARED"
|
|
333
|
+
delim = "|"
|
|
334
|
+
end
|
|
335
|
+
else
|
|
336
|
+
raise "unkown domain kind"
|
|
337
|
+
end
|
|
338
|
+
}
|
|
339
|
+
if acv == ""
|
|
340
|
+
# 呼び先セルが無所属かつ、呼び元も無所属のみ、または結合無しの場合
|
|
341
|
+
acv = "TACP_SHARED"
|
|
342
|
+
end
|
|
343
|
+
sac_str = "{"
|
|
344
|
+
delim = ""
|
|
345
|
+
[:accessPattern1, :accessPattern2, :accessPattern3, :accessPattern4].each{|acp|
|
|
346
|
+
init = (cell.get_attr_initializer acp).to_s
|
|
347
|
+
if init != "OMIT"
|
|
348
|
+
sac_str += delim + init
|
|
349
|
+
else
|
|
350
|
+
sac_str += delim + acv
|
|
351
|
+
end
|
|
352
|
+
delim = ", "
|
|
353
|
+
}
|
|
354
|
+
return sac_str + "}"
|
|
355
|
+
end
|
|
356
|
+
end
|