Real-Time Workshop User's Guide | ![]() ![]() |
信号のストレージの概念
この節では、アプリケーションに対して最適の信号ストレージオプションを選択するために理解する必要がある構造と概念について説明します。
rtB
.rtB: グローバルブロックI/O構造体
デフォルトでは、Real-Time Workshopは、信号メモリを共有し、ローカル変数を利用することによって、メモリ使用量を最適化しようとします。
しかし、信号をグローバルメモリに設定することが望ましい、あるいは必要な多くの状況が存在します。たとえば:
そのような場合に、デフォルトの挙動を変更し、選択した(またはすべての)信号をモデル固有のグローバルブロックI/O構造体に格納することができます。グローバルブロックI/O構造体は、rtBと呼ばれます。
つぎのコードは、図 3-12に示すSignals_examp
モデルから(信号のストレージ最適化をオフにして)生成されたコードでのrtBの定義方法と、宣言方法を示します。
typedef struct BlockIO_tag { real_T SinSig; /* <Root>/Sine Wave */ real_T Gain1Sig; /* <Root>/Gain1 */ } BlockIO; . . . /* Block I/O Structure */ BlockIO rtB;
rtBに格納される信号のフィールド名は、「生成コード内の信号に対するシンボリックなネーミング方法」で記述されている規則に従って生成されます。
信号に対するストレージクラス
Real-Time Workshopでは、信号のstorage classプロパティは、Real-Time Workshopがどのように信号を宣言および格納するかを指定します。この指定は、さらにオプションを指定して条件付ける場合があります。
Real-Time Workshopのコンテキストでは、用語"ストレージクラス"は、C言語で利用されるときのストレージクラス修飾子と同義語ではありません。
Default Storage Class. Auto
は、デフォルトのストレージクラスです。Auto
は、外部コードとインタフェースをとる必要のない信号に対して適切なストレージクラスです。 Auto
ストレージクラスをもつ信号は、ローカルまたは共有変数に格納したり、グローバルデータ構造体に格納することができます。ストレージの形式は、Signal storage reuse オプションとLocal block outputsオプション、および利用可能なスタック領域により異なります。Auto
ストレージクラスをもつ信号に対するコード生成オプションの詳細は、ストレージクラスをもつ信号に対するコード生成オプションの詳細は、「Auto Storage Classをもつ信号」を参照してください。
Explicitly Assigned Storage Classes. Auto
以外のストレージクラスをもつ信号は、rtB
のメンバとして、あるいはrtB
と独立の構造化されていないグローバル変数に格納されます。これらのストレージクラスは、モニタリングや外部コードとインタフェースをとりたい信号に対して適切です。
Signal storage reuse および Local block outputs最適化は、Auto
以外のストレージクラスをもつ信号に適用されません。
Signal Propertiesダイアログを使って、これらのストレージクラスを信号に割り当てます。
SimulinkGlobal(Test Point)
: テストポイントは、他の信号と共有しない、あるいは再利用されないrtB
構造体のフィールドとして格納されます。詳細は「テストポイントの宣言」を参照してください。ExportedGlobal
: 信号は、rtB
データ構造体とは独立のグローバル変数に格納されます。model
_export.h
は、変数をエクスポートします。ExportedGlobal
ストレージクラスをもつ信号は、ユニークな信号名である必要があります。詳細は、「信号と外部コードのインタフェース」 を参照してください。ImportedExtern
: model
.h
は、信号を外部変数として宣言します。ユーザコードは、適切な変数定義を与える必要があります。Signals with ImportedExtern
ストレージクラスをもつ信号は、ユニークな信号名である必要があります。詳細は、「信号と外部コードのインタフェース」 を参照してください。ImportedExternPointer
: model
.h
は、信号を外部ポインタとして宣言します。ユーザコードは、適切なポインタ変数定義を与える必要があります。ImportedExtern
ストレージクラスをもつ信号は、ユニークな信号名である必要があります。詳細は、「信号と外部コードのインタフェース」 を参照してください。![]() | 信号: ストレージ、最適化、インタフェース | Autoストレージクラスをもつ信号 | ![]() |