Skip to main content

スタック使用量の計算

POU ごとのスタック使用状況は、に表示されます。 タスク設定 上のオブジェクト スタック使用量 タブ。

スタック使用量は次によって静的に計算されます。 CODESYS 静的コールスタックを使用する。

計算には以下が含まれます。

  • 計算は、タスクエントリの暗黙的なPOUから始まります。

  • 各 IEC プログラムコールについて (例: PLC_PRG) の場合、呼び出された各 IEC POU のスタック使用量が再帰的に計算されます。POU の最大スタック使用量を決定するために、POU の最大スタック使用量がそれ自体のローカルスタック使用量に加算されます

  • 動的呼び出しの場合、スタック使用量は次のように計算されます。考えられるすべての実装のスタック使用量が決定され、最大のスタック使用量が想定されます。つまり、インターフェイスメソッドでは考えられるすべての実装と、ファンクションブロックメソッドでは考えられるすべてのオーバーライドが考慮されます

  • 外部通話では、ターゲットデバイスで指定された値が想定されます。デバイスが値を指定していない場合は 0 と見なされます。

  • 再帰の場合、計算は中止されます。タイプ属性プラグマの値 estimated-stack-usage 再帰的に呼び出されるコードに適用されます。値が指定されていない場合は 0 とみなされます

したがって、スタック使用量は推定値に過ぎません。想定される最下位コールパスが実行時に実行されないため、この値が高すぎる可能性があります。ただし、再帰や外部呼び出しの見積もりが不適切になるため、この値が低すぎる場合もあります

27.
_cds_task_configuration_tab_stack_usage_example.png


スタック使用量の表示

  1. をダブルクリック タスク設定 オブジェクト。

    タスク設定エディターが開きます。

  2. クリック ビルドコードを生成 コマンド。

  3. をクリックします スタック使用量 タブ。

    タブの情報が更新されます。

    アンダー タスク/最大コールスタックこの場合、順番に呼び出された POU は、想定どおりに最大コールスタックに表示されます。POU の計算されたスタックサイズは、に表示されます スタックサイズ カラム。

28.

スタックサイズが赤で表示されている場合は、それぞれの POU でスタックオーバーフローが発生している可能性があります。変更が必要な POU がわかります。これはコールスタックで赤でマークされた最初の POU

_cds_task_config_stack_usuage.png