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変数の割り当て」を参照してください。
![]() | 信号のストレージの概念 | テストポイントの宣言 | ![]() |