• Imagix 4D ユーザガイド
  • 目次

[クリティカルセクションでの呼出し] レポート

タスク内における割り込み呼び出し、またはセマフォの許可 / 禁止 に関わる潜在的な問題は、[クリティカルセクションでの呼出し] レポートと連携する、[クリティカルセクションの不一致] レポートによって検出されます。両方のレポートでは、C / C++ プログラムに明示されていないため、最初にクリティカルな領域のメカニズムを定義する必要があります。

クリティカルな領域から呼び出される関数は、他のタスクがロックアウトされる時間を延長します。「クリティカルセクションでの呼出し」の解析では、適合性をレビューするために、そのような関数をすべて特定します。クリティカルな領域内からの、そうした呼び出しは、この領域の実装方法におけるエラーも示すことがあります。次のコードを例示します。

int getSensorData();

int input, output;

// start & end critical region
void DisableIrpt(), EnableIrpt();

void SetVars() {
    DisableIrpt();
    input = getSensorData();
}

void CalcOutput() {
    output = input * input / 0.25;
    EnableIrpt();
}

void Task1() {
    SetVars();

    PerformSomeOtherAction();

    CalcOutput();
}

クリティカルな領域内から呼び出された関数は、レポートに出力されます。

Calls in Critical Regions

Settings:
        Critical Region:  CR ( DisableIrpt / EnableIrpt )
                          

Task Definitions
Tasks are from User Defined Tasks
Name        Members  Graph  Root
Task1             7    [+]  Task1

Calls in Critical Region                          File (Line)
          Task
             Line Number of Usage
                  Critical Region
                              User of Calls in Critical Region

CalcOutput                                        calls_in_cr.c (13)
          Task1
               23 (CR)     Task1                               calls_in_cr.c (18)

getSensorData                                     calls_in_cr.c (1)
          Task1
               10 (CR)     SetVars                             calls_in_cr.c (8)

PerformSomeOtherAction                            
          Task1
               21 (CR)     Task1                               calls_in_cr.c (18)