|
データフロー解析 - タスク、クリティカルな領域、イベントの定義
タスクは C / C++ プログラムで明示的に指定されるものではないため、これらのレポートには [タスクの定義] ダイアログからタスクを定義できる機能が搭載せれています。各タスクについてルート関数を指定すると、それぞれのタスクはルート関数、およびそのルート関数から直接的あるいは間接的に呼び出される、すべての関数で構成されると見なされます。[タスクの定義] ダイアログでタスクを定義しない場合は、プロジェクト内のルート関数ごとにタスクが自動的に定義されます。 このレポートでは、割り込み禁止あるいはセマフォによって保護される文のクリティカルな領域や範囲も示されます。これらについても、ソースコードでは明示的に指定されません。[クリティカルセクションの定義] ダイアログでは、クリティカルな領域への入力(割り込み禁止 / セマフォ)、もしくはクリティカルな領域からの出力(割り込み許可 / セマフォ)に使用される関数を指定することが可能です。[クリティカルセクションの不一致] レポートならびに [クリティカルセクションでの呼出し] レポートでは、クリティカルな領域を定義する必要があります。また、その他のレポートにおける、クリティカルな領域の定義は任意です。 マルチタスク・システムの同期に対するイベントの使用は、固有のタスク・フローチェック・レポートである [タスク内のイベント呼出し] レポートおよび [タスク間のイベントの遷移] レポートの2つで解析されます。タスクやクリティカルな領域と同様に、イベントメカニズムも C / C++ プログラムで明示的に示されないため、これらのレポートを実行する前に特定する必要があります。その作業は [イベント定義] ダイアログで行い、ここでオペレーティング・システムのイベント関数を指定します。タスクからの呼び出しにより、これらの関数を使用して待機(pend)、解放(post)、クリアのアクティビティが処理されるのです。また、このダイアログではイベントと、イベント間の情報交換で使用されるオペレーティング・システムの共有リソースに対する、ソースコード・レベルの識別子(マクロ、列挙リテラル、定数変数)を指定します。 [タスクフローチェック] レポートを実行することで、ソフトウェアを調査し、レポートで指摘された問題を理解するために、Imagix 4D の全機能を生かすことができるのです。
タスクの指定
リアルタイムシステムについては、以下のケースをタスクとして考慮してください。
次の関数は、単一のタスクとして定義するか、別のタスクに分けて定義することができます。
ユーザ自身が手動でタスクを指定する代替の方法として、[自動タスク] を選択することで Imagix 4D にユーザが選択したルールに基づくタスクを自動的に定義させることができます。
この定義に従いプログラムがタスクを1しか持たないような場合には、一部の [タスクフローチェック] レポートの価値が失われることになりますが、価値のあるレポートも、まだ存在します。特に、[クリティカルセクションの不一致] レポートは、タスクのクリティカルな領域における問題をレポートし、[Out of Step(Z)変数] レポートは循環タスクでの潜在的な順序付けの問題を示します。
イベントの指定
post と clear に対して別々の関数が適用されているオペレーティング・システムを使用している場合は、その対処方法として、マクロを追加の引数として取得するように修正したクリア関数を定義します。新しいクリア関数を宣言し、その後、実際のクリア関数をその新しい関数に定義してください。例えば、実際のクリア関数を ClearEvent と命名し、そのクリア関数でパラメータを1つ取ると仮定します。そして、使用しているコンパイラ設定ファイルに、以下の文を追記します。
void IMAGIX_ClearEvent(int event, int mode); #define IMAGIX_CLR 1 #define ClearEvent(E) IMAGIX_ClearEvent(E, IMAGIX_CLR)この作業を行うのに最適な場所は、新しい単体のファイルです。このファイルを作成した後、-inc オプションを使用して、そのファイルが全ソースファイルから事実上インクルード(#include)されるようにします(アナライザの構文とオプション のページを参照)。 これらの #define を追加することによって、ソースアナライザが ClearEvent の宣言を処理する際に、構文警告のメッセージが出力されることがありますが、作成されるデータベースに、問題が発生することはありません。 その後 [イベント定義] ダイアログで、IMAGIX_ClearEvent を post イベントのパラメータ、IMAGIX_CLR をクリアイベントのパラメータとして指定します。これらの変更により、イベント関連の [タスクフローチェック] では post のアクティビティとクリアのアクティビティとを区別することが可能となるのです。
|