| Real-Time Workshop User's Guide | ![]() |
Autoストレージクラスをもつ信号
この節では、Autoストレージクラスをもつ信号に対して利用可能なオプションを説明します。これらのオプションを使って、信号メモリの再利用を制御したり、信号に対してローカルまたはグローバル (rtB)ストレージを選択することができます。
Signal storage reuseオプションは、信号のメモリの再利用を制御します。このオプションは、Simulation ParametersダイアログボックスのAdvancedページにあります。

Local block outputsオプションは、信号がrtBのメンバとして格納されるか、あるいは関数のローカル変数として格納されるかを決定します。このオプションは、Real-Time WorkshopページのGeneral code generation optionsカテゴリにあります。

デフォルトでは、Signal storage reuse とLocal block outputsの両方がオンです。
これらのオプションは、相互に作用します。Signal storage reuseオプションがオンのとき
つぎのコードの例は、Signal storage reuse および Local block outputs オプションの効果を説明しています。例題は、Signals_exampモデル(図 3-12を参照)から生成されました。
最初の例は、Signal storage reuse と Local block outputsがオン(デフォルト)であるときの、最大の信号ストレージ最適化について説明しています。Sine WaveおよびGainブロックの出力信号は、MdlOutputs関数のローカル変数rtb_temp0を再利用します。
/* local block i/o variables */real_T rtb_temp0;/* Sin Block: <Root>/Sine Wave */rtb_temp0 = (rtP.Sine_Wave_Amp) * sin((rtP.Sine_Wave_Freq) * ssGetT(rtS) + (rtP.Sine_Wave_Phase));/* Gain Block: <Root>/Gain1 */rtb_temp0 *= (rtP.Gain1_Gain);
限られたスタック領域によって制限されている場合は、Local block outputsをオフにして、メモリの再利用を利用できます。つぎの例は、Local block outputsがオフでSignal storage reuseがオンのとき生成されています。Sine WaveおよびGainブロックの出力信号は、rtBのメンバrtB.temp0を再利用します。
rtB.temp0 = (rtP.Sine_Wave_Amp) * sin((rtP.Sine_Wave_Freq) * ssGetT(rtS) + (rtP.Sine_Wave_Phase));/* Gain Block: <Root>/Gain1 */rtB.temp0 *= (rtP.Gain1_Gain);
Signal storage reuseオプションがオフのとき、信号のストレージは再利用されず、 Local block outputsオプションは利用不可能です。これにより、つぎのコードのように、すべてのブロック出力はグローバルかつユニークになります。
/* Sin Block: <Root>/Sine Wave */rtB.SinSig = (rtP.Sine_Wave_Amp) *sin((rtP.Sine_Wave_Freq) * ssGetT(rtS) + (rtP.Sine_Wave_Phase));rtB.Gain1Sig = rtB.SinSig * (rtP.Gain1_Gain);
大規模モデルで、Signal storage reuseを利用不可能にすると、RAMおよびROMの使用量が著しく増加します。そのため、この方法は推奨できません。
表 3-5は、Signal storage reuse および Local block outputsオプションの可能な組合せをまとめたものです。
スタック領域割り当ての制御
Local block outputs オプションがオンのとき、スタック領域の使用は、つぎのTLC変数によって制限されます。
MaxStackSize: the t関数で宣言されるローカル変数の総割り当てサイズは、MaxStackSize(バイト単位)を超えません。MaxStackSizeは、任意の正の整数です。ローカル変数のサイズの総量がこの最大値を超える場合は、Target Language Compilerは残りの変数をローカルでなくグローバルメモリに割り当てます。MaxStackVariableSize: 関数で宣言されるローカル変数のサイズを、Nバイトに制限します。ここで、N>0です。サイズがMaxStackVariableSizeを超える変数は、ローカルでなくグローバルメモリに割り当てます。システムターゲットファイルのこれらの変数の値は、必要ならば変更できます。詳細は、「Target Language Compiler変数の割り当て」を参照してください。
| 信号のストレージの概念 | テストポイントの宣言 | ![]() |