共有ユ,ティリティコ,ドの生成
共有ユ,ティリティコ,ドを生成する場合
モデルのブロックには,アルゴリズムを実装するための共通の機能が必要になることがあります。この機能をスタンドアロンのサポ,ト関数または補助関数にモジュ,ル化することを検討します。この方法は,各ブロックインスタンスにこの機能のコードをインライン化するよりも効率的な場合があります。ラブラリと共有ユティリティのどらを使用するか決定するには,以下の点を考慮してください。
関数が静的に定義される場合,複数の呼び出し元をもつ可能性のある関数をライブラリにパッケージングする。コードジェネレーターを使用してモデルのコードを生成する前からこの関数のソースコードはファイルに存在します。
関数を静的に定義できない場合,複数の呼び出し元をもつ可能性のある関数を共有ユーティリティとしてパッケージングする(コード生成の最中に生成されます)。たとえば,複数のモデル固有およびブロック固有のプロパティによって,使用される関数とその動作を指定します。また,これらのプロパティが共有ユ,ティリティヘッダ,ファ,ルの型定義(
类型定义
など)を決定します。一意の動作を決定するプロパティの可能な組み合わせの数が多い場合,使われる可能性のある関数のファイルをコード生成の前に静的に定義することは現実的でなくなります。
生成された関数の命名の構成
生成された共有ユ,ティリティ関数の既定の命名規則を次のいずれかの方法で構成します。
構成 | アクション |
---|---|
コドマッピングエディタ- c . cまたはコードマッピングプログラミングインターフェイスを使用して既定のカスタマイズ設定をマッピングした新しいモデルまたは既存のモデル | 嵌入式编码器ディクショナリ(嵌入式编码)で,カスタムの関数命名規則を指定する関数カスタマ。次に,コードマッピングエディターで,またはコードマッピングプログラミングインターフェイスを使用して,[共有ユ,ティリティ]関数カテゴリをそのテンプレ,トにマッピングします。詳細にいては,为数据元素和函数类别配置默认的C代码生成(嵌入式编码)を参照してください。 |
R2018aより前のリリ、スで作成され、コドマッピングエディタ- c . cまたはコドマッピングプログラミングンタフェスで構成されていないモデル | モデルコンフィギュレションパラメタ[共有ユ,ティリティ識別子の形式](嵌入式编码)(CustomSymbolsStrUtil )をカスタムの関数命名規則に設定します。詳細にいては,标识符格式控制(嵌入式编码)を参照してください。 |
コドマッピングエディタ- c . cまたはコードマッピングプログラミングインターフェイスを使用してモデルを設定すると,モデルコンフィギュレーションパラメーター[共有ユ,ティリティ識別子の形式]を設定してもコ,ド生成に影響しません。この設定は,次の指定で構成されたモデルには適用できません。
システムタゲットファル | プログラミング言語 |
---|---|
ert.tlc |
c++ |
autosar.tlc |
C |
autosar_adaptive.tlc |
c++ |
共有ユ,ティリティ関数の命名規則には,条件付きチェックサムト,クン$ C
を含めなければなりません。コドジェネレタで生成されるチェックサムの長さをカスタマズするには,パラメタ[共有チェックサム長](SharedChecksumLength
)を使用します。チェックサムの長さを増やすと,競合の可能性が軽減します。
この例では,cコド生成のための共有ユティリティ関数名のカスタマズを示します。
モデル例
rtwdemo_configdefaults
と嵌入式编码器アプリを開きます。モデルコンフィギュレションパラメタ[共有コ,ドの配置]を[
共享位置
]に設定します。嵌入式编码器ディクショナリを開きます。[cコ,ド]タブで[コ,ド,ンタ,フェ,ス]、[嵌入式编码器ディクショナリ]を選択します。
[関数カスタマeconp econpズテンプレト]タブで,表の下の[作成]をクリックして新規の関数カスタマ▪▪ズテンプレ▪▪トを追加します。
関数カスタマ▪▪ズテンプレ▪トに▪いて▪次の構成を指定します。
名前:
(exSharedUtility)
関数名:
[mymodel_ N C]美元
字符串を使用してこの形式をカスタマerepズできます。トクン
$ C
を含めなければなりません。
コ,ドマッピングエディタ,を開きます。[cコ,ド]タブで,[コ,ド,ンタ,フェ,ス]、[既定のコ,ドマッピング]を選択します。
[関数の既定の設定]タブで,[共有ユ,ティリティ]カテゴリにいて,[関数カスタマeconp econpズテンプレト]を
(exSharedUtility)
として設定します。コ,ドとコ,ド生成レポ,トを生成します。
レポ,トの左のナビゲ,ションペ,[共有ファ电子邮箱ル]の共有ユティリティに対して生成されたファルのリストを確認します。
共有ユ,ティリティコ,ドの配置の制御
モデルコンフィギュレションパラメタ[共有コ,ドの配置]で共有ユ,ティリティコ,ドの配置を制御します。オプションの既定値は[自動]
です。この設定では,モデルに既存の共有ユーティリティコードまたは次のブロックのいずれも含まれていない場合,コードジェネレーターは固定小数点などのユーティリティに必要なコードを
ファ电子邮箱ル,模型
. c
ファ▪▪ル,またはビルドフォルダ▪▪内の個別のファ▪▪ル(模型
. cppvdp_grt_rtw
など)に配置します。
模型ブロック
金宝app仿真软件的功能ブロック
函数调用者ブロック
StateflowまたはMATLAB函数ブロックからのS金宝appimulink命令功能の呼び出し
パラメタ[チャ,トレベルの関数をエクスポ,ト]を選択した場合の状态流グラフィカル関数
モデルにこれらのブロックが1slprj
内に共有ユ,ティリティフォルダ,を作成して使用します。共有ユ,ティリティフォルダ,の命名規則は,slprj /
目标
/ _sharedutils
です。目标
は,模型ブロックを使用するシミュレ,ションではsim卡
になり、コ、ド生成ではシステムタ、ゲットファ、ルの名前になります。
Slprj /sim/_sharedutils %文件夹用于模拟Slprj /grt/_sharedutils %文件夹用于grt。tlc STF slprj/ert/_sharedutils %与ert一起使用的文件夹。tlc底座slprj /mytarget/_sharedutils % folder used with mytarget.tlc STF
現在のモデルに既存の共有ユーティリティコードまたは上記のブロックのいずれも含まれていない場合でも,共有ユーティリティ生成用のslprj
フォルダ,を使用してモデルをビルドするように強制するには,パラメ,タ,[共有コ,ドの配置]を[共有場所]
に設定します。コ,ドジェネレ,タ,は,通常のビルドフォルダ,ではなく,slprj
フォルダ,にユ,ティリティを配置します。この設定は,モデル間での記号の競合を回避するので,複数のモデルから手動でコードを結合する場合に便利です。
共有ユ,ティリティコ,ド用のrtwtypes.hの配置の制御
生成されたヘッダファルrtwtypes.h
は,基本的な型定義,#定义
ステ,トメントおよび列挙値を提供します。詳細にいては,rtwtypes.hを参照してください。
ビルドプロセスが共有ユーティリティフォルダーを使用するかどうかを選択することによってrtwtypes.hファイルの配置を制御します。モデルビルドが共有ユ,ティリティフォルダ,を使用する場合,ビルドプロセスでrtwtypes.h
はslprj /
に配置されます。それ以外の場合は,ソフトウェアが目标
/ _sharedutilsrtwtypes.h
を
に配置します。模型
_目标
_rtw
モデルをモデル階層に追加するか,階層内の既存のモデルを変更すると,コ,ドの生成時に共有rtwtypes.h
ファ@ @ルが更新されることがあります。更新が行われた場合は再コンパイルを行い,開発プロセスによっては,以前に生成されたコードを再確認します。rtwtypes.h
ファイルへの更新を最小限に抑えるために,[コンフィギュレーションパラメーター]ダイアログボックスで以下の変更を行います。
モデルで複素数デタ型を現在使用していない場合でもモデルコンフィギュレションパラメタ[サポ,ト:複素数]を選択します。このパラメーターを選択しておくと,将来,コード統合に際して複素数データ型のサポートを追加する要件が生じた場合の対応策となります。
パラメタ[@ @ @ @ @ @ @ @ @ @]をオフにします。インラインでないs函数がモデルで使用されている場合は,このオプションによりエラーが発生します。
パラメタ[クラシックコ,ル,ンタ,フェ,ス]をオフにします。このパラメタ設定で,grtシステムタゲットファルの使用が無効になります。
エクスポトデタの重複するヘッダファルの回避
次の場合にエクスポトされたヘッダファルが共有ユティリティフォルダに置かれます。
信号,パラメーターおよび状態の宣言のファイル配置を,ストレージクラスを定義および適用することによって制御する。
コドジェネレタがユティリティコドを共有場所に配置する。
たとえば、以下を使用してデ、タのヘッダ、ファ、ルを指定できます。
嵌入式编码器ディクショナリ(嵌入式编码)で定義し,コドマッピングエディタ- c . cでモデルデ,タのカテゴリにマッピングしたストレ,ジクラス。
[信号プロパティ]ダ电子邮件アログボックスの[コ,ド生成]タブ。
デ,タオブジェクトの
HeaderFile
プロパティ。デ,タオブジェクトはクラス金宝app仿真软件。信号
および金宝app仿真软件。参数
のオブジェクトです。
宣言がファ@ @ル
に現れるようにするには,ヘッダ,ファ,ルの名前を指定せずにおくのがベストプラクティスです。既定では,コ,ドジェネレ,タ,はデ,タ宣言を模型
. h
に配置します。模型
. h
ヘッダファル名として
を指定し,コードジェネレーターがユーティリティコードを共有場所に配置する場合は,モデルからコードを生成することはできません。コドジェネレタはファル模型
. h
を,モデルのビルドフォルダ,と共有ユ,ティリティフォルダ,の両方に作成することはできません。模型
. h
インクリメンタルビルドによる共有ユーティリティコードの生成の削減
モデルのビルドによって共有ユーティリティフォルダー内のCソースファイルを生成するように指定できます。共有ユ,ティリティコ,ドの生成を参照してください。これらのファイルには関数定義とヘッダーファイル(マクロ定義を含む)を含むCソースファイルが含まれています。この節の説明では,“関数”という言葉は,関数とマクロを意味します。
モデル参照を使用する場合,または同じ開始ビルドフォルダーから複数のスタンドアロンのモデルを作成する場合,同じモデル内のブロックおよび異なるモデル内のブロックは共有関数を使用できます。コードジェネレーターは,最初にコード生成がトリガーされたブロックに対して一度だけ指定の関数のコードを生成します。この製品は,後のブロックの関数コードを生成する必要があるかどうかを決定するときに,ファイル存在チェックを実行します。ファesc escルが存在する場合,モデルビルドによって関数は再生成されません。共有ユーティリティコードのメカニズムでは,どのブロックまたはモデルで関数が生成されるのかにかかわらず,指定された関数とファイル名は同じ機能動作を表す必要があります。この要件を満たすには,以下が必要です。
関数の動作を決定するモデルのプロパティが,共有ユーティリティのチェックサムに寄与するか,または関数名とファイル名を決定します。
関数の動作を決定するブロックプロパティは,関数とファ。
コンパイル中,共有ユーティリティフォルダーのmakefile規則によって,新しいCファイルのみをコンパイルするように選択され,オブジェクトファイルが共有ユーティリティライブラリ,rtwshared.lib
またはrtwshared.a
に段階的にアカブされます。▪▪▪▪ンクリメンタルコンパ▪▪▪▪ルも実行されます。
共有ユ,ティリティコ,ドチェックサムの管理
モデルコンフィギュレションパラメタ[共有コ,ドの配置]を[共有場所]
に設定する場合,またはモデルに模型ブロックが含まれる場合,コードジェネレーターは共有コードを共有ユーティリティフォルダーに配置します。ビルドプロセスによって,共有コードに対するコード生成構成の共有ユーティリティチェックサムが生成されます。
以降のコド生成の最中に,現在のフォルダに関連するチェックサムファルslprj /
が存在する場合,コドジェネレタはそのファルを読み取ります。コードジェネレーターは,ビルドしている現在のモデルに,共有ユーティリティモデルのプロパティのチェックサムと一致するコンフィギュレーションプロパティがあるかどうかを検証します。目标
/ _sharedutils checksummap.matchecksummap.mat
で定義されているプロパティと現在のモデルプロパティの間で不一致が発生した場合は,エラーが表示されます。エラーメッセージを使用してチェックサムを管理します(現在のモデルの構成の問題を診断して解決するなど)。
共有ユ,ティリティのチェックサムハッシュテ,ブルの表示
チェックサムに寄与するプロパティ値を表示すると便利です。この例では,rtwdemo_lct_start_term.slx
モデルを使用します。checksum.mat
ファaapl . exeルをmatlab®に読み込み,チェックサム関連のプロパティを定義するtargetInfoStruct
を表示するには,次を行います。
rtwdemo_lct_start_term.slx
モデルを開きます。コマンドウィンドウで以下のように入力します。rtwdemo_lct_start_term
新しい作業フォルダ,を作成し,そのフォルダ,に移動します。
mkdirC: \ Temp \ democdC: \ Temp \ demo
モデルのコピ,をこのフォルダ,に保存します。
モデルを作成します。モデルは共有ユ,ティリティを生成するように設定されます。
[アプリ]タブの[コ,ド生成]の下で,(金宝app仿真软件编码器)をクリックします。
[cコ,ド]タブの[コ,ドの生成]セクションで,[ビルド]ボタンをクリックします。
ビルドプロセスによって作成された
_sharedutils
フォルダ,に移動します。cdC: \ Temp \ demo \ grt slprj \ \ _sharedutils
checksummap.mat
ファaapl . exeルをmatlabに読み込みます。负载checksummap
hashTbl.targetInfoStruct
の内容を表示し,チェックサム関連のプロパティ値を調べます。hashTbl.targetInfoStruct
以下の例では,コマンドウィンドウに,モデルから生成された共有ユ,ティリティのhashTbl.targetInfoStruct
が表示されます。
ans =结构体字段:ShiftRightIntArith:““ProdShiftRightIntArith:”“Endianess:“LittleEndian”ProdEndianess:“LittleEndian”字:“8、16、32,32岁,64年,32岁,64年,64年,64年,64年Prodwordlengths:“8、16、32,32岁,64年,32岁,64年,64年,64年,64年TargetWordSize:“64”ProdWordSize:“64”TargetHWDeviceType:定制的处理器- > MATLAB主机的ProdHWDeviceType:“英特尔- > x86 - 64 (Windows64) TargetIntDivRoundTo:“零”ProdIntDivRoundTo:“零”UseDivisionForNetSlopeComputation:‘off’PurelyIntegerCode:“off”PortableWordSizes:“off”Sup金宝appportNonInlinedSFcns:“RTWReplacementTypes:”MaxIdInt8:“MAX_int8_T”MaxIdUint8:“MAX_uint8_T”MaxIdInt16:“MAX_int16_T”MinIdInt16:“MAX_int16_T”MaxIdInt32:“MAX_int32_T”MinIdInt32:“MIN_int32_T”MaxIdUint32:“MAX_uint32_T”MaxIdInt64:“MAX_int64_T”MinIdInt64:“MIN_int64_T”MaxIdUint64:“MAX_uint64_T”boolean true boolean false typeelimitidreplacementheaderfile:" SharedCodeRepository: " TargetLang: 'C' TargetLangStd: 'C89/C90 (ANSI)' InstructionSetExtions: 'None' PreserveExternInFcnDecls: 'on' ImplementImageWithCVMat: 'off' EnableSignedRightShifts: 'on' EnableSignedLeftShifts: 'on' TflName: 'None' TflCheckSum: [1.2401e+09 624079486 3.1681e+09 3.3534e+09] UtilMemSecPreStatement: " UtilMemSecPostStatement: " UtilMemSecComment: " CodeCoverageChecksum: [3.6498e+09 78774415 2.5508e+09 2.1183e+09] TargetLargestAtomicInteger:'Char' TargetLargestAtomicFloat: 'None' ProdLargestAtomicInteger: 'Char' ProdLargestAtomicFloat: 'Float' LongLongMode: 'on' ProdLongLongMode: 'off' HardwareBoard: 'None' toolchainOrTMF: 'Microsoft Visual c++ 2017 v15.0 | nmake(64位Windows)'
共有ユ,ティリティのチェックサムのコンフィギュレ,ションパラメ,タ,への関連付け
共有ユ,ティリティモデルからのtargetInfoStruct
ハッシュテ,ブルを調べます。一部のキ,と値のペアはモデルプロパティに直接関連しています。その他のペアはプロパティのグル,プに関連しています。
以下の表にキ,と値のペアを示します。
キ,の名前 | モデルプロパティ |
---|---|
ShiftRightIntArith |
TargetShiftRightIntArith |
ProdShiftRightIntArith |
ProdShiftRightIntArith |
Endianess |
TargetEndianess |
ProdEndianess |
ProdEndianess |
字 |
TargetBitPerChar ,TargetBitPerShort ,TargetBitPerInt ,TargetBitPerLong ,TargetBitPerLongLong ,TargetBitPerFloat ,TargetBitPerDouble ,TargetWordSize ,TargetBitPerPointer ,TargetBitPerSizeT ,TargetBitPerPtrDiffT |
Prodwordlengths |
ProdBitPerChar ,ProdBitPerShort ,ProdBitPerInt ,ProdBitPerLong ,ProdBitPerLongLong ,ProdBitPerFloat ,ProdBitPerDouble ,ProdWordSize ,ProdBitPerPointer ,ProdBitPerSizeT ,ProdBitPerPtrDiffT |
TargetWordSize |
TargetWordSize |
ProdWordSize |
ProdWordSize |
TargetHWDeviceType |
TargetHWDeviceType |
ProdHWDeviceType |
ProdHWDeviceType |
TargetIntDivRoundTo |
TargetIntDivRoundTo |
ProdIntDivRoundTo |
ProdIntDivRoundTo |
UseDivisionForNetSlopeComputation |
UseDivisionForNetSlopeComputation |
PurelyIntegerCode |
PurelyIntegerCode |
PortableWordSizes |
PortableWordSizes |
金宝appSupportNonInlinedSFcns |
金宝appSupportNonInlinedSFcns |
RTWReplacementTypes |
EnableUserReplacementTypes, ReplacementTypes |
MaxIdInt8 |
MaxIdInt8 |
MinIdInt8 |
MinIdInt8 |
MaxIdUint8 |
MaxIdUint8 |
MaxIdInt16 |
MaxIdInt16 |
MinIdInt16 |
MinIdInt16 |
MaxIdUint16 |
MaxIdUint16 |
MaxIdInt32 |
MaxIdInt32 |
MinIdInt32 |
MinIdInt32 |
MaxIdUint32 |
MaxIdUint32 |
MaxIdInt64 |
MaxIdInt64 |
MinIdInt64 |
MinIdInt64 |
MaxIdUint64 |
MaxIdUint64 |
BooleanTrueId |
BooleanTrueId |
BooleanFalseId |
BooleanFalseId |
TypeLimitIdReplacementHeaderFile |
TypeLimitIdReplacementHeaderFile |
SharedCodeRepository |
予約済み(内部使用専用) |
TargetLang |
TargetLang |
TargetLangStd |
TargetLangStandard |
InstructionSetExtions |
InstructionSetExtensions |
PreserveExternInFcnDecls |
PreserveExternInFcnDecls |
ImplementImageWithCVMat |
ImplementImageWithCVMat |
EnableSignedRightShifts |
EnableSignedRightShifts |
EnableSignedLeftShifts |
EnableSignedLeftShifts |
TflName |
CodeReplacementLibrary |
TflCheckSum |
予約済み(内部使用専用) |
UtilMemSecPreStatement |
MemSecFuncSharedUtil ,MemSecPackage |
UtilMemSecPostStatement |
MemSecFuncSharedUtil ,MemSecPackage |
UtilMemSecComment |
MemSecFuncSharedUtil ,MemSecPackage |
CodeCoverageChecksum |
予約済み(内部使用専用) |
TargetLargestAtomicInteger |
TargetLargestAtomicInteger |
TargetLargestAtomicFloat |
TargetLargestAtomicFloat |
ProdLargestAtomicInteger |
ProdLargestAtomicInteger |
ProdLargestAtomicFloat |
ProdLargestAtomicFloat |
LongLongMode |
TargetLongLongMode |
ProdLongLongMode |
ProdLongLongMode |
HardwareBoard |
HardwareBoard |
toolchainOrTMF |
次の名前です。
|