Real-Time Workshop User's Guide    

インラインS-Functionデバイスドライバの作成

概要

デバイスドライバをインライン化するには、以下を与える必要があります。

例題: インライン化されたADCドライバ

デバイスドライバのインライン化の理解のための手助けとして、この節では、ADCデバイスに対するドライバブロックの例を説明します。「インライン化されたADCドライバのソースコード」には、以下に対するコードがリストされています。

S-Functionブロックdriverは、マスクされ、アイコンをもちます。図 17-8は、S-Functionブロックdriverを使ったモデルを示します。図 17-9は、ブロックのダイアログボックスを示します。

図 17-8: モデル内のADC S-Functionドライバブロック

ダイアログボックスで以下を入力します。

図 17-9: ADCドライバのダイアログボックス

Simulation Code..   adc.cは、シミュレーション中に実行されるほとんどすべての関数を含みます(唯一の例外はmdlRTWで、コード生成中に実行します)。これらの関数のほとんどは、「非インラインS-Functionデバイスドライバの作成」の非リアルタイムコードの例と同じです。S-Functionは、つぎの関数を実現します。

adc.cは、シミュレーションコードのみを含むので、MATLAB_MEX_FILEによって、C MEX-ファイルとしてコンパイルされることを保証します。

同じ理由により、adc.cは条件なしてsimulink.cをインクルードします。

mdlRTWとコード生成.   mdlRTW は、S-Functionがデータ構造体を生成したmodel.rtwファイルに書き出すメカニズムです。Target Language Compilerは、コード生成時にこれらのデータ構造体を使います。ドライバの他の関数と異なり、mdlRTWはコード生成時に実行します。

この例題では、mdlRTWssWriteRTWParamSettings関数を呼び出して、ユーザが入力したパラメータ値(ベースアドレス、ハードウェアゲイン)とユーザが入力した値から計算された値(解像度、オフセット)の両方を含む構造体を生成します。

構造体は、model.rtwで定義されます。

(SFcnParamSettingsの実際の値は、ユーザが入力した値から得られます)。

SFcnParamSettings構造体に格納された値は、つぎの割り当てステートメントのように、driver.tlc内で参照されます。

Target Language Compilerは、baseAddrのような変数を使って、model.cmodel.hのようなリアルタイムコードファイルにパラメータを生成します。これは、つぎの節で説明します。

TLCファイル.   adc.tlcは、3つのTLC関数を含みます。BlockTypeSetup 関数は、つぎのステートメント

model.hファイルに生成します。その他の2つの関数StartOutputsは、model.cMdlStartおよびMdlOutputs関数の内部でコードを生成します。

adc.tlcおよび生成されたコード内のステートメントは、device.hで定義されたマクロとシンボルを使い、SFcnParamSettings構造体のパラメータ値を使います。つぎのコードは、上記のSFcnParamSettingsの値を使って定数値を含むコードを生成します。

上記のTLCコードは、このステートメントをmodel.cMdlOutputs 関数に生成します。

adcSetHardwareGainadcGetGainMaskは、低レベルのハードウェア呼び出しを展開するマクロです。

S-Functionラッパー

ドライバコードをターゲットシステムに組み込むほかの手法は、S-Functionラッパーを使うことです。この手法では、以下のファイルを作成します。

ラッパーS-Functionの使用法に関する詳細は、Writing S-Functionsを参照してください。


 非インラインS-Functionデバイスドライバの作成 MEX-ファイルとドライバブロックのビルド