メインコンテンツ

エントリポイント関数の特定および MATLAB コードのチェック

コードを生成する前に、1 つ以上のエントリポイント関数を特定する必要があります。次に、コード アナライザーとコード生成の準備状態ツールを使用して、コード生成に固有の一般的なエラーがないか MATLAB® コードをチェックします。エントリポイント関数を特定し、一般的なエラーがないかチェックすることが、コード生成のワークフローの最初の手順です。

エントリポイント関数の特定

エントリポイント関数は、カスタム C/C++ コードから直接アクセスする関数です。コード ジェネレーターは、エントリ ポイントとして特定された関数のシグネチャを保持します。エントリポイント関数は、生成されたコードへの安定したインターフェイスです。エントリ ポイントとして指定されていない関数の場合、コード ジェネレーターは内部のヒューリスティックな方法を使用して、コードのパフォーマンスと可読性のバランスを取ります。これは、コード ジェネレーターが非エントリポイント関数の呼び出しを削除、インライン化、または変更する可能性があることを意味します。エントリ ポイントとして指定されていない関数は、生成されたコードへの安定したインターフェイスではありません。

コード ジェネレーターは、次のような複数のタイプのエントリポイント関数をサポートしています。

  • 単一のエントリ ポイント、単一の生成された関数シグネチャ — 多くのアプリケーションでは、エントリ ポイントは、他の MATLAB 関数を呼び出す単一の最上位関数です。単一の関数シグネチャを使用して生成されたコードとのインターフェイスにする場合は、単一のエントリポイントの関数を使用します。

  • 単一のエントリ ポイント、複数の関数シグネチャ – MATLAB では、特定の関数がさまざまなデータ型を入力として受け入れることができます。単一のエントリポイントの関数に対して複数のシグネチャを生成することで、生成されたコードでこの柔軟性を再現できます。複数のシグネチャをもつ関数のコードの生成を参照してください。

  • 複数のエントリ ポイント、複数の関数シグネチャ – MATLAB コード内の複数の関数に対して安定したインターフェイスを生成するために、複数のエントリ ポイントのコードを同時に生成できます。複数のエントリポイント関数のためのコード生成を参照してください。

コード アナライザーの使用

コード生成エラーを最小限に抑えるために、C/C++ コードを生成する前に、MATLAB エディターでコード アナライザーを使用します。コード アナライザーは、入力されたコードをチェックし、問題を報告し、変更を推奨します。

コード アナライザーを使用してコード生成に固有の警告とエラーを特定するには、%#codegen 命令を MATLAB ファイルに追加します。%#codegen 命令を追加した場合にコード アナライザーによって実行されるチェックのリストについては、Performance Improvementsを参照してください。

エディター ウィンドウの右上にあるインジケーターが緑色の場合、コード アナライザーはコード生成の問題を検出していません。

Code analyzer window, showing green indicator

インジケーターが赤のときは、コード アナライザーによってコード内のエラーが検出されています。インジケーターがオレンジのときは、警告が検出されています。インジケーターが赤またはオレンジのときは、赤またはオレンジのマーカーが、問題の発生したコードの右に表示されます。マーカーの上にカーソルを置くと、エラーまたは警告に関する情報が表示されます。より詳細な説明と推奨アクションを知るには、エラー メッセージ内の下線が引かれているテキストをクリックします。

Code analyzer window, showing red indicator and hyperlinks to error locations

MATLAB コードからコードを生成する前に、コード アナライザーによって検出されたエラーを修正します。コード アナライザーの詳細については、コード アナライザーを使用したエラーと警告についてのコードのチェックを参照してください。

コード生成の準備状態ツールの使用

コード ジェネレーターではほとんどの MATLAB 言語機能と関数がサポートされています。C/C++ コードの生成でサポートされている関数およびオブジェクトを参照してください。コードにサポートされない関数および言語機能がないかチェックするには、コード生成の準備状態ツールを使用します。コード生成の準備状態ツールを実行するには、次のいずれかの方法を使用します。

  • MATLAB Coder™ アプリで、エントリポイント関数を追加する。コード生成の準備状態ツールが自動的に実行されます。

  • ブラウザーで、コード生成の準備状態をチェックするファイルを右クリックし、[コード生成の準備状態をチェック] を選択する。

  • コマンド ラインで coder.screener 関数を使用する。

コード生成の準備状態ツールはコードを解析し、サポートされていない MATLAB 関数および言語機能を特定しようとします。ベスト プラクティスとして、コードを生成する前に、このツールによってリストされた問題を修正してください。詳細については、コード生成の準備状態ツールを参照してください。

コード生成前のエラーのトラブルシューティング

コード アナライザーおよびコード生成の準備状態ツールにより、MATLAB コード内の可能性のあるコード生成コンプライアンスの問題をすべて検出できるわけではありません。ただし、これらのツールを使用すると、動作し、最適化され、本番環境で使用可能な C/C++ または MEX コードを生成するために完了する必要があるトラブルシューティングおよびコード生成のサイクルの数を最小限に抑えることができます。

次の表では、コード アナライザーまたはコード生成の準備状態ツールで検出できるコードの問題の一部について説明し、考えられる解決策を示します。

エラー メッセージ問題考えられる解決策
コード生成はスクリプトをサポートしていません。MATLAB スクリプトのコードを生成しようとしています。コード生成では、MATLAB コードは関数定義のみを含む関数ファイル内に存在する必要があります。
この関数はコード生成でサポートされていません。MATLAB コードで使用されている 1 つ以上の MathWorks® 関数がコード生成でサポートされていません。

コードにサポートされない関数が含まれている場合は、次のいずれかの回避方法を検討してください。

  • コード生成をサポートする代替の関数と System object があるかを確認します。

  • カスタムの MATLAB コードを記述して、サポートされていない関数を置き換えます。

  • サポートされていない関数を置き換えるカスタム C 関数を呼び出すには、coder.ceval を使用します。

  • スタンドアロン コードを生成する必要がない場合は、coder.extrinsic を使用してサポートされていない関数を呼び出します。

これらの回避方法の詳細については、エラーの解決: コード生成でサポートされていない関数を参照してください。

コード生成では、代入により変数を完全に定義してから添字を付ける必要があります。既存のインデックス境界の外側に値を代入して、配列を作成または拡張しようとしています。MATLAB では、未定義の配列要素に値を代入することで配列を作成または拡張できます。コード生成では、この配列の作成および拡張方法はサポートされていません。行列の要素に値を代入する前に、行列を定義する必要があります。インデックス付けされた変数を代入する前に行列を定義するを参照してください。
コード生成では、'end + 1' インデックス付けによる配列サイズの増加のみサポートされます。コード生成でサポートされていない方法でendを使用して配列を拡張しようとしています。

コード生成のために MATLAB コード内で end を使用して配列を拡張するには、次の特定の制限に従う必要があります。

  • end は、ベクトルの拡張にのみ使用してください。

  • end+1 要素に値を代入することでのみベクトルを拡張してください。コード生成では、end+2 などの後続の要素への値の代入はサポートされていません。

(end + 1) のインデックス付けを使用した配列の拡張を参照してください。

変数が、定義する前に使用されている可能性があります。これはコード生成で許可されていません。変数が定義される前に使用されています。すべての変数が使用前に定義されていることを確認してください。多くの場合、このエラーは、このコードが MATLAB でも実行できないことを示しています。

参考

トピック