グローバル変数を含むコードの固定小数点への変換
この例では固定小数点コンバーター アプリを使用してグローバル変数を含む MATLAB® アルゴリズムを固定小数点に変換する方法について説明します。
ローカルの書き込み可能なフォルダーで関数
use_globals.m
を作成します。function y = use_globals(u) %#codegen % Declare AR and B as global variables global AR; global B; AR(1) = u + B(1); y = AR * 2;
同じフォルダーに関数を呼び出すテスト ファイル
use_globals_tb.m
を作成します。u = 55; global AR B; AR = ones(4); B=[1 2 3]; y = use_globals(u);
MATLAB ツールストリップの [アプリ] タブの [コード生成] で、[固定小数点コンバーター] アプリ アイコンをクリックします。
エントリポイント関数
use_globals.m
をプロジェクトに追加するために、[ソース ファイルの選択] ページでファイルを参照して [開く] をクリックします。[次へ] をクリックします。[入力の型を定義] ページでテスト ファイルとして
use_globals_tb.m
を追加します。[入力の型の自動定義] をクリックします。テスト ファイルから、
u
の入力型をdouble(1x1)
とすることを決定します。[このコードはグローバル変数を使用していますか?] の隣の [はい] を選択します。既定では固定小数点コンバーター アプリは、プロジェクト内の最初のグローバル変数に
g
という名前を付けます。コード内のグローバル変数の名前を入力します。グローバル変数
AR
の右にあるフィールドで、型をdouble(4x4)
のように指定します。グローバル変数
B
は関数use_globals
の中で代入されていません。この変数をグローバル定数として定義するには、この定数の右にあるフィールドをクリックして[定数値の定義]
を選択します。テスト ファイル内で定義されているようにB
の値を[1 2 3]
と入力します。アプリはB
に値[1 2 3]
があることを示しています。アプリはAR
が初期化されていないことを示しています。[次へ] をクリックします。エントリポイント MATLAB 関数用にインストルメント化された MEX 関数がアプリによって生成されます。[固定小数点に変換] ページで [シミュレーション] をクリックし、関数のシミュレーションを実行して範囲情報を収集し、推奨されるデータ型を取得します。
[変換] をクリックし、推奨されたデータ型を受け入れて関数を固定小数点に変換します。
生成された固定小数点コード内で、グローバル変数
AR
はAR_g
になります。ラッパー関数には 3 つのグローバル変数
AR
、AR_g
およびB
が含まれます。AR_g
は固定小数点にキャストされたAR
と等しく設定され、AR
は double にキャストされたAR_g
と等しく設定されます。グローバル変数B
は定数のため固定小数点コード内に別の変数はありません。function y = use_globals_fixpt(u) %#codegen % Declare AR and B as global variables fm = get_fimath(); global AR_g; global B; AR_g(1) = fi(u + B(1), 0, 6, 0, fm); y = fi(AR_g * fi(2, 0, 2, 0, fm), 0, 7, 0, fm); end function fm = get_fimath() fm = fimath('RoundingMethod', 'Floor',... 'OverflowAction', 'Wrap', 'ProductMode', 'FullPrecision',... 'MaxProductWordLength', 128, 'SumMode', 'FullPrecision',... 'MaxSumWordLength', 128); end