C コードのスタイルの制御
このチュートリアルについて
学習目的
このチュートリアルでは以下の方法について説明します。
if-elseif-else
判定ロジックのコードをswitch-case
ステートメントとして生成する。MATLAB® Coder™ アプリを使用して MATLAB コードから C コードを生成する。
MATLAB Coder プロジェクトで、コード生成の構成パラメーターを設定する。
元の MATLAB コードと生成された C コードの間のトレースに使用できるコード生成レポートを生成する。
必要な製品
このチュートリアルを実施するには次の製品が必要です。
MATLAB
MATLAB Coder
C コンパイラ
MATLAB Coder では、サポートされているインストール済みのコンパイラが検索されて使用されます。MathWorks® Web サイトのサポートされるコンパイラを参照してください。
mex -setup
を使用して、既定のコンパイラを変更できます。既定のコンパイラの変更を参照してください。
必要なファイル
タイプ | 名前 | 説明 |
---|---|---|
関数のコード | test_code_style.m | if-elseif-else を使用する MATLAB の例 |
ローカルの作業フォルダーでのファイルの作成
ローカル作業フォルダーを作成します。たとえば
c:\ecoder\work
のようにします。次のコードを含むファイル
test_code_style.m
を作成します。function y = test_code_style(x) %#codegen if (x == 1) y = 1; elseif (x == 2) y = 2; elseif (x == 3) y = 3; else y = 4; end
MATLAB Coder アプリを開く
MATLAB ツールストリップの [アプリ] タブの [コード生成] の下で、MATLAB Coder アプリ アイコンをクリックします。
[ソース ファイルの選択] ページが開きます。
ソース ファイルの指定
[ソース ファイルの選択] ページで、エントリポイント関数の名前
test_code_style.m
を入力または選択します。[プロジェクトの場所] フィールドで、プロジェクトの名前を
code_style.prj
に変更します。[次へ] をクリックして [入力の型を定義] ステップに進みます。アプリによって関数のコーディングの問題とコード生成の準備状態が解析されます。問題が検出された場合は、[コード生成の準備状態の確認] ページが開くので、ここで問題を確認して修正できます。この例では問題は検出されないので、[入力の型を定義] ページが表示されます。
入力の型の定義
C では静的なデータ型が使用されるため、コード ジェネレーターは MATLAB ファイル内のすべての変数のプロパティをコンパイル時に判別しなければなりません。したがって、すべての関数入力のプロパティを指定しなければなりません。入力 x
のプロパティを定義するには、次の手順に従います。
[入力またはグローバルの型を直接入力します] をクリックします。
x
の右にあるフィールドをクリックします。オプションの一覧から
[int16]
を選択します。次に、[スカラー]
を選択します。[次へ] をクリックして [実行時の問題の確認] ステップに進みます。
メモ
[if-elseif-else のパターンを switch-case ステートメントに変換する] の最適化は、入力のデータ型が整数と列挙の場合にのみ機能します。
実行時の問題の確認
[実行時の問題の確認] ステップでは、エントリポイント関数からの MEX ファイルの生成、MEX 関数の実行および問題の報告が行われます。このステップはオプションです。ただし、このステップを実行することをお勧めします。このステップで、生成された C コードでの診断が難しいランタイム エラーを検出して修正することができます。既定では、MEX 関数にはメモリ整合性チェックが含まれます。このチェックにより、配列の範囲と次元のチェックが実行されます。このチェックを実行することにより、MATLAB 関数に対して生成されたコード内のメモリ整合性の違反が検出されます。詳細については、実行時チェックの制御を参照してください。
[実行時の問題の確認] ダイアログ ボックスを開くために [問題の確認] 矢印 をクリックします。
[実行時の問題の確認] ダイアログ ボックスで、
test_code_style
を呼び出すコードと入力例を入力します。この例では、test_code_style(int16(4))
と入力します。[問題の確認] をクリックします。
アプリにより MEX 関数が生成されます。入力例を使用して MEX 関数が実行されます。MEX 関数の生成または実行中に問題が検出された場合は、警告およびエラー メッセージが表示されます。これらのメッセージをクリックして問題のあるコードに移動し、問題を修正します。この例ではアプリは問題を検出しません。
[次へ] をクリックして [コード生成] ステップに進みます。
コード生成パラメーターの設定
[生成] ダイアログ ボックスを開くために [生成] 矢印 をクリックします。
[ビルド タイプ] を
[スタティック ライブラリ (.lib)]
に設定します。[詳細設定] をクリックし、次の設定を行います。
[コード外観] タブで [if-elseif-else のパターンを switch-case ステートメントに変換する] チェック ボックスをオンにします。
[デバッグ] タブで [常にレポートを作成] が選択されていることを確認します。
[すべての設定] タブで [コードのトレーサビリティを有効にする] が選択されていることを確認します。
C コードの生成
[生成] をクリックします。
コード生成が完了すると、コード ジェネレーターによって C スタティック ライブラリ test_code_style.lib
と C コードが /codegen/lib/test_code_style
サブフォルダーに生成されます。コード ジェネレーターによってレポートへのリンクが提供されます。
生成されたコードの表示
コード生成レポートを開くには、[レポートの表示] リンクをクリックします。
関数
test_code_style
がコード ペインに表示されます。MATLAB コードと C コードを隣り合わせで表示するには、[コードのトレース] をクリックします。
MATLAB コードのステートメント
if (x == 1)
にカーソルを合わせます。レポートで
if (x == 1)
からswitch
ステートメントにトレースされます。
ワークフローの完了
[次へ] をクリックして [ワークフローの完了] ページを開きます。
[ワークフローの完了] ページには、コード生成に成功したことが示されます。このページには、プロジェクトのサマリーと生成された出力へのリンクが表示されます。
覚えておきたい重要なポイント
コード生成前に実行時の問題を確認するには、[実行時の問題の確認] ステップを実行します。
ビルド構成設定にアクセスするには、[コード生成] ページで [生成] ダイアログ ボックスを開き、[詳細設定] をクリックします。