グローバル変数を含むコードの固定小数点への変換
この例では固定小数点コンバーター アプリを使用してグローバル変数を含む 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